Reputation: 35
I'm doing the N_Queens problem and think I have got myself a bit lost within my code using recursion & backtracking.
I'm attempting to solve this without using any import functions, or advanced language. I've reached a point where i'm really frustrated and would appreciate any solution and comments on the side to help my knowledge.
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()
It firstly says 'Col' is not defined which is confusing me, I secondly seem unable to advance from this current situation.
Ideally, the board should place a 2 at every point the Queen is placed.
Please go easy on me, I have only just started learning Python3.
Upvotes: 0
Views: 45
Reputation: 8047
SolveNQueens()
gets called first when the code runs, and the first statement is findCol(board, col)
, until this point we only have defined globals N
and board
but there is no definition of col
.
However, row
and col
are defined in other functions, so maybe we can also put those definitions in SolveNQueens()
function to clear that error, something like:
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)
...
Upvotes: 1