0

これが私の問題です。建物のさまざまな部分の一連の写真があり、それらをリンクする必要があります。その後、A 地点から B 地点までの経路を表示するために、各写真を順番に表示する必要があります。つまり、教室から非常階段までです。

私は少し調査を行いましたが、無向の重み付けされていないグラフがうまくいくはずです。

私はこの分野での経験があまりないからです。写真をデータ構造に保存する方法と、その仕事をするためのライブラリがあるかどうか疑問に思っていましたか?

4

1 に答える 1

1

はい、問題を解決できるアルゴリズムを適用する必要があります。

あなたはこの素晴らしいlibrayを使うことができます:

問題のこの部分を解決します。

データの保存方法については、頂点(写真)と頂点間のエッジ(写真A-写真B)、(写真A-写真C)などを定義する必要があります。

データベースからその情報を回復し、対応する構造をクイックグラフにロードして、パスを見つけさせる必要があります。

ここに広範なドキュメントとサンプルがあります:

これに似たもののために私は使用しました:

  • MyEdgesクラスを実装しますIEdge<T>(Tは写真IDタイプ、intなど)-写真(場所)間のエッジを表します
  • を継承するグラフクラスAdjacencyGraph<T,MyRelation>。利用可能なMyEdgesをロードします(これは有向グラフです)
  • PathFinderアルゴリズムクラス:私はから継承しましたFloydWarshallAllShortestPathAlgorithm<T, MyRelation>

次に、次のことを行う必要があります。

  • エッジを作成します(つまり、DBから読み取ります)
  • Graphクラスをインスタンス化し、それにすべてのエッジを追加します
  • グラフをパラメーターとして使用して、PathFinderコンストラクターを使用します。これにより、パスが検索されます。

このアルゴリズムでは、特定の写真(エッジ)からどの写真に移動できるかを指定できます。距離は同じであると想定していますが、すべてのルート(AからB、BからAなど)を定義する必要があります。 。これは、OPの「重み付けされていない」部分です。ケースが異なる場合は、ドキュメントを読む必要があります。

AをBに追加すると、BもAに追加されることを希望する場合は、グラフを実装できUnDirectedます。コードの数行を節約できますが、通常、すべての可能性を自分で追加することをお勧めします。「図書館から通路Aと通路Bに行くことができます。通路Bから図書館と実験室に行くことができます」など、すべてのエッジを考えようとする方が簡単です。

データベースに2つのテーブルを作成できます。

  • 写真(ID付き)
  • パス(IdFromおよびIdTo)

これは、保守と実装が簡単です。

于 2012-05-10T22:47:24.703 に答える