recursion - list returns empty for the Nqueens solution (written in python)? -


i saw c++ version of nqueens solution online , decided code in python, reason solution list returns empty.

def is_safe(q , r):     in range(q):         tmp_q = position[i]         if tmp_q == position[i] or tmp_q == r - (q - i) or tmp_q == r + (q - i):             return false     return true  def queensproblem(q):     # q equals n, have finished placed queens on each row     if(q == n):         solution = []         in range(n):             solution.append(position[i])         solutions.append(solution)     else:         #look possibility in each row, 0...n         in range(n):             if(is_safe(q, i)):                 position[q] =                 queensproblem(q + 1)  # q->number of queens placed q = 0 n = 4 solutions = [] position = [none]*n queensproblem(q)  print(solutions) 

logic error in is_safe:

    tmp_q = position[i]     if tmp_q == position[i] or ...         return false 

at point, tmp_q must equal position[i] ... forced condition! if is_safe ever enters loop, return false. thus, never complete solution, , list remains null.

i'm not going fix entire program ... that's not about. however, i'll give little more help: here's code used it, statements debugging. how learned "texture" of failure: is_safe returning false below first queen.

print low-tech, effective debugging solution: when have sick program, ask hurts. :-)

def is_safe(q , r):     in range(q):         tmp_q = position[i]         if tmp_q == position[i] or tmp_q == r - (q - i) or tmp_q == r + (q - i):             return false     return true  def queensproblem(q):     # q equals n, have finished placed queens on each row     if(q == n):         solution = []         in range(n):             solution.append(position[i])         solutions.append(solution)         print "end of problem", solutions     else:         #look possibility in each row, 0...n         in range(n):             print "possibility loop", i, solutions, is_safe(q, i)             if(is_safe(q, i)):                 position[q] =                 print "recur", position, q+1                 queensproblem(q + 1)  # q->number of queens placed q = 0 n = 4 solutions = [] position = [none]*n queensproblem(q)  print(solutions) 

Comments

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -