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
Post a Comment