6
JavaでのKnightツアーの問題を解決しようとしています。 私の目標は、どの次元のチェス盤でも馬のすべての可能なツアーを計算することです。私が使用しようとしているのは、補完リストデータ構造です。問題は今、どの四角形が四角形に隣接しているかを知っていることですが、隣接する四角形がどの方向を向いているのかわかりません。どうすればこの問題を解決できますか?隣接リストを含むKnightのツアーアルゴリズム
JavaでのKnightツアーの問題を解決しようとしています。 私の目標は、どの次元のチェス盤でも馬のすべての可能なツアーを計算することです。私が使用しようとしているのは、補完リストデータ構造です。問題は今、どの四角形が四角形に隣接しているかを知っていることですが、隣接する四角形がどの方向を向いているのかわかりません。どうすればこの問題を解決できますか?隣接リストを含むKnightのツアーアルゴリズム
ここにあなたが何をすべきかのちょうど大まかな概要です:
サンプルスクエアクラス:
public class Square
{
public final Square up;
public final Square down;
public final Square left;
public final Square right;
public Square(Square up, Square down, Square left, Square right)
{
this.up=up;
this.down=down;
this.left=left;
this.right=right;
}
public Square getUp(){return up;}
public Square getDown(){return down;}
public Square getLeft(){return left;}
public Square getRight(){return right;}
}
サンプル騎士クラス:
public class Knight
{
private Square mySquare;
public Knight(Square start)
{
mySquare = start;
}
/* 7 0
* 6 1
*
* 5 2
* 4 3
*/
public boolean move(int dir)
{
switch(dir)
{
case 0: try{
mySquare=mySquare.getUp().getUp().getRight(); return true;
} catch (NullPointerException e) {return false}
case 1: try{
mySquare=mySquare.getUp().getRight().getRight(); return true;
} catch (NullPointerException e) {return false}
case 2: try{
mySquare=mySquare.getDown().getRight().getRight(); return true;
} catch (NullPointerException e) {return false}
case 3: try{
mySquare=mySquare.getDown().getDown().getRight(); return true;
} catch (NullPointerException e) {return false}
case 7: try{
mySquare=mySquare.getUp().getUp().getLeft(); return true;
} catch (NullPointerException e) {return false}
case 6: try{
mySquare=mySquare.getUp().getLeft().getLeft(); return true;
} catch (NullPointerException e) {return false}
case 5: try{
mySquare=mySquare.getDown().getLeft().getLeft(); return true;
} catch (NullPointerException e) {return false}
case 4: try{
mySquare=mySquare.getDown().getDown().getLeft(); return true;
} catch (NullPointerException e) {return false}
default: return false;
}
}
}
は、あなたの隣接リストストア "法的ジャンプ" を行うか、彼らは "隣の広場" を記憶します?。そして、なぜあなたは道案内が必要なのですか?「正方形のID」だけを格納する方が簡単ではないでしょうか?第1四角は「0」です。 – tucuxi
「法的なジャンプ」とはどういう意味ですか? – ShinyForce
"法律上のジャンプ"はあなたのチェス盤で法的な騎士の動きになります。隣接関係リストを話すとき、ネットワークが思い浮かぶ。あなたはすべての四角を通して[ハミルトニアンパス](https://en.wikipedia.org/wiki/Hamiltonian_path_problem)を構築しようとしています。それは、騎士法律上の間でジャンプするときだけ四角形を接続してネットワークを再構成するのが理にかなっていますそれら。 – tucuxi