A*-Algorithm が見つかりました。8-Puzzleの最適解を見つけるために使いたいと思います。A *アルゴリズムを使用して8パズルを解くための "近傍関数"の最適化
等が画像にパズルのように見える:
0 1 2
3 4 5
6 7 8
アレイとして表される:0 1 2 3 4 5 6 7 8
"近隣関数" のすべてのネイバーを返します配列インデックス 隣人はすべて、array-indexから垂直または水平に1フィールド離れた番号です。
例:
:隣人(4)1,5,7,3及び隣接(6)(ウーヴェラーベによってコード)-3,7-私の現在の解を返す返します
function Neighbours(zahl: Integer): TArray<Integer>;
var
lst: TList<Integer>;
c: Integer;
r: Integer;
begin
lst := TList<Integer>.Create;
try
c := zahl mod 3;
r := zahl div 3;
if r > 0 then
lst.Add(zahl-3);
if c > 0 then
lst.Add(zahl-1);
if c < 2 then
lst.Add(zahl+1);
if r < 2 then
lst.Add(zahl+3);
result := lst.ToArray;
finally
lst.Free;
end;
end;
私は、よりコンパクトで優れたソリューションを探しています。私は何かアルゴリズムを見たいと思う。私は、もしかすると、好きではない。プログラミング言語は、C/C++/Delphi/C#
のいずれかに移植可能であれば、実際問題はありません!
ルックアップテーブルを使用します。 –
このような小さなフィールドにハードコードされた値のテーブルを使用することができます。 – MBo
はい、アルゴリズムを使用する方法は興味がありますが、よりコンパクトです。 –