0

グリッド内の 2 つのノード間のすべてのパスを見つけようとしていますが、パスは最初から最後まですべてのノードを通過する必要があります。例 (開始 = S、終了 = E)

0 0 0
0 S 0
0 0 エ

上記の答えは 2 つのパスです: (「.」は無視してください)

0-0-0
|.......|
0 S-0
|
0-0-E

0-0-0
|……|
0 S 0
|...|...|
0-0 日

再帰を使用することを考えましたが、各呼び出しのオーバーヘッドが高いためにそれをあきらめました...そして、スタックを使用した反復アプローチを採用することにしました。(再帰のようなものですが、そうではありません...固定メモリオーバーヘッド)。このソリューションは、サイズ (4x7) のグリッドでうまく機能しますが、8x8 グリッドで試してみました...そして 4 時間で終了しませんでした...可能性の合計数が約 3 ** であるため、これは理にかなっていますエッジ上にない各ノードには 3 つのトラバーサル方法があるため、そのソリューションは失敗します。

縦と横の分割を使用して 8x8 グリッドを 2 つに分割することを考えましたが、これは理想的とは言えないパスを見つけることにつながります。

私が見逃しているものはありますか???? それを速くするために何かできることはありますか?明日の解決策を投稿します(Cで行います)。

4

3 に答える 3

0

まあ、長方形のグリッドグラフ内の任意の2つの頂点間の最長パスを見つけるための線形時間アルゴリズムがあり、これはまさにあなたが探しているもののようです.

于 2014-11-12T14:36:19.300 に答える
0

これを開始するための最短経路の問題を見てください。Bellmann-Ford または Dijkstra のアルゴリズムは試してみる価値があります。グリッドに活用できるいくつかのプロパティがある場合、それらの効率を改善できる可能性があります。

于 2010-10-25T08:36:13.563 に答える
0

いいえ、何も見逃すことはありません。

これは NP 困難な最長経路問題です。

于 2010-10-25T08:37:56.473 に答える