2012-04-23 11 views
1

私は数日間Floydのアルゴリズムを実装して、グリッド構造内で最短経路を見つける方法を以下に説明するようにしてみました。どのように私はこのような何かを実装する方法について誰も正しい方向に私を指すことができますか?ありがとう。長方形の障害物を持つ11x11グリッド上で最短経路を見つけるFloydのアルゴリズムを実装する方法は?

入力:

  • 開始/終了は、障害物
  • 障害の数は、左上の座標と右下の
  • 含めて10から0の間で
  • ユーザ入力がなければなりません座標

    出力:

    • int型

    制限事項として

  • の距離を通過しているすべての座標を示すパス:

    • 障害が
    • 開始と終了が矩形障害物
    • 内で設定することはできませんがオーバーラップすることはできませんが
    • パスには矩形のエッジに沿って移動することはできますが、移動することはできません
    • パスは2つのだけの隣接する頂点間の距離は、私は121x121アレイのための条件を生成するヘルプが必要1

    ある

  • 対角線ない、水平および垂直移動できます。

    これはこれまで私が行ってきたことです。

    for(i=1;i<=n;i++) { 
        for(j=1;j<=n;j++) { 
         if(edge exists from i to j) W[i][j] = 1; 
           // distance=1 if nodes are adjacent 
         else if (edge does not exist from i to j) W[i][j] = inf; 
           // distance=inf. if nodes do not meet 
         else if (i = j) W[i][j] = 0; // distance=0 if i=j 
        } 
    } 
    
  • +0

    121x121アレイの条件を生成するのに助けが必要です。これは私がこれまでに得たものです。 'のために(i = 1; iが<= N; iが++)のため { { 場合(エッジが存在するからIへJ) W [i]が[(J = 1、J ++; <= N J) j] = 1; //ノードが隣接している場合は距離= 1 else if(エッジがiからjまで存在しない) W [i] [j] = inf; //距離= inf。ノードが合致しない場合 else if(i = j) W [i] [j] = 0; // i = jなら距離= 0 } } – user1351995

    +0

    @ user1351995参考:このサイトで元の質問に戻ることができます。私は先に進み、質問にあなたの説明をコピーしました。 – JohnFx

    答えて

    2

    http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm はちょうどそれが(それはかなり単純なアルゴリズムです)実際のC++コードからそれほどdiferentiateべきではない(アルゴリズムを実装するために、この擬似コードを使用しています。Wikiのリンクも最短経路のアルゴリズムを提供します 母はこれをフォーラムに初めて投稿しました:)

    +1

    実際、Floyd-Warshallはこれに対して遅すぎます(O(n^3)、n = 121^2)。 BFSまたはA *が良い選択かもしれません。 – nhahtdh

    +0

    ハハは、簡単なFloyd Warshallアルゴリズムの実装に問題がある人にA *を提案しています。 –

    +0

    BFSは実装が簡単で問題を解決するのに十分です。 A *は、OPが既知のsrcとdestの間の検索を高速化したい場合です。私の解答はちょうどOPがいくつかの座標の組の間で最短経路を見つけたいと思う場合です。同じボードを使用していて、多くのクエリがある場合、Floyd-Warshallが良い選択かもしれませんが、121x121アレイ全体の生成が完了するまでには時間がかかります。 – nhahtdh

    関連する問題