以下の(効率的に)解決するアルゴリズムについては疑問に思っています。数字の[1..9]の行列で、 1)から底部(9)まで、垂直方向または水平方向に別の番号で反転させるだけである。アルゴリズム:2Dマトリックスの再配置(要素の反転)
例入力マトリックス:
1 8 2 6 1 6
9 2 5 1 6 2
3 6 9 2 9 8
5 1 7 4 2 8
4 2 7 6 9 5
所望の出力マトリックス: 'フリッピング' に関する
1 1 1 1 2 2
2 2 2 2 3 4
4 5 5 5 6 6
6 6 6 7 7 8
8 8 9 9 9 9
明確化:例えば入力行列を取ります。左上隅に「1」があります。その1は横に8の横にフリップするか(最初の行は今度は8 1 2 6 1 6
になります)、またはその下の9で垂直にフリップすることができます(最初の列は現在9 1 3 5 4
になります)。それは斜めに2で反転することはできません。
この問題の解決方法(言語は問題ありません)はありますか?
また、以下の点を明確にしてください。効率的に言えば、アルゴリズムの実行時間、またはソリューションの長さ(移動量)を意味しますか? –
@ウォルト:移動回数が少なくても効率が向上します。 – Alex
@Alex:そのA *提案は本当に良いです。ヒューリスティックが実際の残距離よりも小さい場合、A *は最適な品質を保証します。 –