2013-03-03 1 views
1
# -*- coding: utf-8 -*- 


def puzzle(rows, cols): 
    if rows == 0: 
     return [[]] 
    else: 
     return new_queen(rows - 1, cols, puzzle(rows - 1, cols)) 


def new_queen(new_row, cols, plsd_queens): 
    new_solutions = [] 
    for solution in plsd_queens: 
     for new_col in range(cols): 
      if test(new_row, new_col, solution): 
       new_solutions.append(solution + [new_col]) 
    return new_solutions 


def test(new_row, new_col, solution): 
    for row in range(new_row): 
     if solution[row] == new_col or solution[row] + row == new_col + new_row or\ 
           solution[row] - row == new_col - new_row: 
      return False 
    return True 

안녕하세요! N-queens 퍼즐의 재귀 알고리즘의 고유 솔루션을 어떻게 찾을 수 있습니까? 그것은 단지 모든 솔루션을 찾습니다은 92 개 솔루션이 될 것입니다 보드의 8x8에,하지만 독특한는 12입니다 (다른 솔루션을 번역하고이 12에서 미러링) 나는이 생각N-queens 퍼즐 재귀 알고리즘의 고유 솔루션 찾기

+3

모든 솔루션 세트를 가져와 고유성에 대한 두 가지 솔루션을 비교하십시오. –

+3

모든 해결책을 취한 후 고유성을 다루는 것은 어떻습니까? –

+0

@czarpino, 재미 있고, 어떻게해야합니까? –

답변

0

입니다 유용 : link1 link2

은 최상의 결과를 들어 당신은 dynomic - 프로그래밍하여 알고리즘을 설계해야하고 그것을 찾을 수 있습니다 google Stackoverflow

당신이 배열 A [N] [수]를 설정하고 [..] [I의 상태 내가 저장 ].

A = {5,1,8,4,2,7,3,6} {1} .....

참고 이 항목에 대한 샘플은 N = 8 인 제 : 각 솔루션은 대칭과 회전에 의해 8 상태로 바뀔 수 있습니다. 각 결과에 대해 대칭성과 회전성을 확인하기 위해 솔루션을 배열에 저장할지 여부를 결정합니다.