私はこの問題を RNG を使ってブルート フォースで解決することができました。作業グリッドが 3x3 であっても、最適なソリューションを見つけるのに約 4 ~ 5 秒かかります。
ブルートフォースなしでブルートフォースが見つけたのと同じ動きを生成できるようにする方法を知りたいです。
2 つの例とブルート フォースで見つかった解決策をリストします。ソリューションを分析して、なぜそれらが選択されたのかを調べようとしましたが、何もわかりません。
このゲームは、(左から右) と (右から左) の両方向に循環回転を使用して動作します。
左から右への循環回転はこれを行います
If [a, b, c] then [b, c, a]
右から左への循環回転はこれを行います
If [a, b, c] then [c, a, b]
ゲームデータはこれだと言えます(1から9までの任意の順列である可能性があります)
たとえば
Data = 7, 2, 6, 1, 5, 4, 3, 8, 9
テーブルの上のピースを 8 つの異なる方法で動かすことができます。
1) 行に基づく巡回ローテーション (左から右)。
2) 行に基づく巡回ローテーション (右から左)。
3) 列に基づいて上から下へ。
4) 列に基づいて下から上へ。
5 ~ 8 は斜めに設定されているため、Column または Row は必要ありません。
5) 左上から右下 (左から右)。
6) 左上から右下 (右から左)。
7) 右上から左下 (左から右)。
8) 右上から左下 (右から左)。
データは次のようにロードされます
- 007 | 002 | 006
- 001 | 005 | 004
- 003 | 008 | 009
総当たり解決法:
1)。[右上] から [左下] (右から左)
2)。下から上、列: 0
3)。左から右、行: 1
これがシミュレートされたソリューションです
1)。[右上] へ [左下] (右から左)
- 007 | 002 | 003
- 001 | 006 | 004
- 005 | 008 | 009
2)。下から上、列: 0
- 001 | 002 | 003
- 005 | 006 | 004
- 007 | 008 | 009
3)。左から右、行: 1
- 001 | 002 | 003
- 004 | 005 | 006
- 007 | 008 | 009
これは解決するのに 6 回の移動が必要な例 2 です。
- 009 | 008 | 007
- 006 | 005 | 004
- 003 | 002 | 001
解決方法: (6 手)
1)。[右上] から [左下] (右から左)
2)。上から下、列:1
3)。下から上、列:0
4)。[左上] から [右下] (左から右)
5)。左から右、行:1
6)。右から左、行:2
とても単純なパズルですが、効率的な解決策を見つけるのは簡単ではありません。誰かが私を正しい方向に導くことができますか?