python - N Queens Breadth First Search -


i trying find solution n queens problem using breadth first search.

now, solution written n-rocks, cannot adjust work n queens puzzle. understand trying searching diagonal correct?

i tried following https://rosettacode.org/wiki/n-queens_problem#python:_raymond_hettingers_permutations_based_solution , adapt is_goal_queens, without success.

i need find 1 solution, not of them, first 1 gets hit bfs need.

and need adjust disallow field (x,y) initial board. assume queue starts particular row/column set?

import sys import time   f = str(sys.argv[1]) # size of board n = int(sys.argv[2]) # row x = int(sys.argv[3]) # col y = int(sys.argv[4])  print f, n, x, y  initial_board = [[0] * n] * n   def q_count_on_row(board, row):     return len(board[row])   # count # of pieces in given column def q_count_on_col(board, col):     return len([row[col] row in board])  def q_count_pieces(board):     return len([len(row) row in board])   # return string board rendered in human-friendly format def printable_board_queens(board):     return "\n".join([" ".join(["q" if col else "." col in row]) row in board])   # add piece board @ given position, , return new board (doesn't change original) def add_piece(board, row, col):     return board[0:row] + [board[row][0:col] + [1, ] + board[row][col+1:]] + board[row+1:]   # list of successors of given board state def successors2(board):     return [add_piece(board, r, c) r in range(0, n) c in range(0, n) if count_pieces(board)+1 <= n]   # check if board goal state def is_goal_queens(board):         return q_count_pieces(board) == n , \     all([q_count_on_row(board, r) != r-1 r in range(0, n)]) , \     all([q_count_on_col(board, c) != c-1 c in range(0, n)])   def solve_queens(initial_board):     fringe = [initial_board]     while len(fringe) > 0:         s in successors2(fringe.pop(0)):             print s             if is_goal_queens(s):                 return s             fringe.append(s)     return false   def main():     if f == 'nqueens':         print ("starting initial board:\n" + printable_board_queens(initial_board) + "\n\nlooking solution...\n")         solution = solve_queens(initial_board)         print (printable_board_queens(solution) if solution else "sorry, no solution found. :(")     else:         print "not valid argument"   if __name__ == '__main__':     start_time = time.time()     main()     print time.time() - start_time 

edit:

i have changed is_goal_queens() , result outputted is:

starting initial board: . . . . . . . . . . . . . . . .  looking solution...  [[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] q . . . . . . . . . . . . . . . 0.0 


Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -