Problems finishing off recursion with N_Queens
up vote
0
down vote
favorite
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.
python-3.x n-queens
add a comment |
up vote
0
down vote
favorite
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.
python-3.x n-queens
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
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.
python-3.x n-queens
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.
python-3.x n-queens
python-3.x n-queens
asked Nov 9 at 19:07
philcode101
32
32
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
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)
...
Hi, i'm not allowed to use the 'zip' function - any advice without?
– philcode101
Nov 9 at 20:38
okay I've replacedzip()
withrange(len())
I think should work the same
– davedwards
Nov 9 at 21:09
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
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)
...
Hi, i'm not allowed to use the 'zip' function - any advice without?
– philcode101
Nov 9 at 20:38
okay I've replacedzip()
withrange(len())
I think should work the same
– davedwards
Nov 9 at 21:09
add a comment |
up vote
0
down vote
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)
...
Hi, i'm not allowed to use the 'zip' function - any advice without?
– philcode101
Nov 9 at 20:38
okay I've replacedzip()
withrange(len())
I think should work the same
– davedwards
Nov 9 at 21:09
add a comment |
up vote
0
down vote
up vote
0
down vote
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)
...
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)
...
edited Nov 9 at 21:08
answered Nov 9 at 20:31
davedwards
4,79521130
4,79521130
Hi, i'm not allowed to use the 'zip' function - any advice without?
– philcode101
Nov 9 at 20:38
okay I've replacedzip()
withrange(len())
I think should work the same
– davedwards
Nov 9 at 21:09
add a comment |
Hi, i'm not allowed to use the 'zip' function - any advice without?
– philcode101
Nov 9 at 20:38
okay I've replacedzip()
withrange(len())
I think should work the same
– davedwards
Nov 9 at 21:09
Hi, i'm not allowed to use the 'zip' function - any advice without?
– philcode101
Nov 9 at 20:38
Hi, i'm not allowed to use the 'zip' function - any advice without?
– philcode101
Nov 9 at 20:38
okay I've replaced
zip()
with range(len())
I think should work the same– davedwards
Nov 9 at 21:09
okay I've replaced
zip()
with range(len())
I think should work the same– davedwards
Nov 9 at 21:09
add a comment |
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53231906%2fproblems-finishing-off-recursion-with-n-queens%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown