0


BFS を使用してルービック キューブ ソルバーを作成しようとしている目標。並べ替えることができるすべての方法でおそらく遅くなることはわかっています。=P 誰かが疑問に思っている場合に備えて、これは学校向けではありません。

おそらく簡単に修正できる問題
スクランブルされたルービック キューブの別の状態を に入れるときはいつでも、queue<array>それは単なる浅いコピーであるため、ルービック キューブの他の状態が追加されると、キュー内の以前の状態が実際に新しい状態に変更して一致させます。queue<array>つまり、 内のすべての要素が同じままであることを確認するにはどうすればよいでしょうか?

これを修正しようとした試み
https://stackoverflow.com/a/129395/984680
基本的にこのコードを使用して、キューから出たときにキューブの新しいコピーを作成し、前に別の新しいコピーを作成しますもう一度キューに入れました(別の状態で)。以下のコードは、新しいコピーがキューに挿入される前にどのように作成されるかを示しています。

    //make deep copy of ccube (char array)
    char[][][] newcube = DeepClone(ccube);
    buffer.Enqueue(new State(newcube, calg + face + " ")); //even though newcube gets put into array, it ends up changed after ccube changes

これは、配列がキューの先頭から引き出されたときに作成されるディープコピーです。

    ccube = DeepClone(buffer.Peek().cube);

配列のクローンを何度も作成しましたが (それほど多くのコピーを作成する必要はないことがわかりました)、追加した新しい状態は古い状態と同じままです。立方体のすべての面を毎回あらゆる方法で回転させたにもかかわらず、キュー内に 2 つの異なる要素しかないため、これを知っています。

助けていただける方には、あらかじめ感謝いたします。

4

1 に答える 1