4クイーンの問題を解決するために、Pythonでバックトラッキングアルゴリズムを実装しようとしています。私は次のクラスQueensを作成しました:
def __init__(self, board_size=4):
self.board = [[0 for i in xrange(0,board_size)] for i in xrange(0,board_size)];
しかし、再帰的なバックトラックを実装すると、参照によってパスされるため、ボードはアクセスされたすべての場所で1でいっぱいになります。
def backtrack(self, board, next_column):
(algorithm here) ...
board[i][column] = 1 ... #to indicate a placed queen
self.backtrack(board, next_column + 1);
(rest of algorithm)
私は私ができることを知っています
new_board = copy.deepcopy(board);
浅いコピーは、高次元の配列では機能しません。ディープコピーに問題があると聞いているので、これを行うためのより良い方法はありますか?2Dリスト以外の別のデータ構造を示唆する回答も受け入れられます。
どうもありがとう