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.










share|improve this question

























    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.










    share|improve this question























      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.










      share|improve this question













      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 9 at 19:07









      philcode101

      32




      32






















          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)
          ...





          share|improve this answer






















          • 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










          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













           

          draft saved


          draft discarded


















          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

























          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)
          ...





          share|improve this answer






















          • 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














          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)
          ...





          share|improve this answer






















          • 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












          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)
          ...





          share|improve this answer














          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)
          ...






          share|improve this answer














          share|improve this answer



          share|improve this answer








          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 replaced zip() with range(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










          • okay I've replaced zip() with range(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

















           

          draft saved


          draft discarded















































           


          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          Use pre created SQLite database for Android project in kotlin

          Darth Vader #20

          Ondo