Проблемы с завершением рекурсии с N_Queens - PullRequest
0 голосов
/ 09 ноября 2018

Я занимаюсь проблемой N_Queens и думаю, что немного потерял себя в своем коде, используя рекурсию и возврат.

Я пытаюсь решить эту проблему без использования каких-либо функций импорта или продвинутого языка. Я достиг точки, когда я действительно расстроен и был бы признателен за любое решение и комментарии на стороне, чтобы помочь моим знаниям.

        global N 
N = 8

board =      [[0,0,0,0,0,0,0,0], 
              [0,0,0,0,0,0,0,0], 
              [0,0,0,0,0,0,0,0], 
              [0,0,0,0,0,0,0,0], 
              [0,0,0,0,0,0,0,0], 
              [0,0,0,0,0,0,0,0], 
              [0,0,0,0,0,0,0,0],
              [0,0,0,0,0,0,0,0]]

def printboard(board): 
    for row in range(N): 
        for col in range(N): 
            print(board[row][col], end=' ') 
        print('')



def SafePosition(board, row, col): 

  return (board[row][col]==0)

  def AddQueen(board, row, col):
    K = row+col
    L = row-col
    for row in range(N): 
        for col in range(N): 
          if (row+col == K) or (row==row) or (col==col) or (row-col == L):
            board[row][col] = 1       
    board[row][col] = 2

def findCol(board, col):
  for row in range(N):
    if(board[col][row] == 0):
      return [row]




def SolveNQueens(): 
  findCol(board, col)
  if board[row][col] == 0:
    AddQueen(board,row,col)
    if SafePosition(board,row, col):
      board[row][col]= 2
      SolveNQueens()
      board[row][col] = 0
    return



  printboard(board)

SolveNQueens()

Во-первых, он говорит, что «Кол» не определено, что меня смущает, во-вторых, я, кажется, не могу выйти из этой текущей ситуации.

В идеале на доске должно быть 2 в каждой точке, где находится Королева.

Пожалуйста, будьте осторожны, я только начал изучать Python3.

1 Ответ

0 голосов
/ 09 ноября 2018

SolveNQueens() вызывается первым при выполнении кода, и первым оператором является findCol(board, col), до этого момента мы определили только глобальные переменные N и board, но определения col. * 1006 не существует. * Однако row и col определены в других функциях, поэтому, возможно, мы можем также поместить эти определения в функцию SolveNQueens(), чтобы устранить эту ошибку, например:

def SolveNQueens():
    columns = [col for col in range(N)] # using previous definitions from 
    rows = [row for row in range(N)]    # printboard(board) function

    # can use one range here because board is a square
    # with same length sides columns and rows
    # either len(rows), or len(columns)

    for i in range(len(rows)):
        row = rows[i]   
        col = columns[i]

        # now we have row, col available
        findCol(board, col)
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...