2012-04-18 22 views
0

私は個人的なプロジェクトのための画像に取り組んでいます。私はステップで立ち往生しました(さらに、比較的簡単なステップです)。私の質問は途中で画像に関連していません。Dijkstraの最短経路アルゴリズムの変更

イメージの各ピクセルのint値を計算しています。そして、ピクセル間の最小コスト(ノード)のパスを探したいと思います。実際に私はA *アルゴリズムの実装を行っています。しかし、私はそれを使用したくないのです。なぜなら、渡すことができるノードまたは通過できないノードで「マップ」を制限したくないからです。私は、各ノードはコストをかけて渡すことができます。ノードによってはコストがかかるものもあれば、そうでないものもあります。しかし、通過できないノードはありません。

プロジェクトの非常に孤立している部分なので、コードを入力する必要はありません。だから私は誰にも練習したくない。しかし、基本的に私はノードのリストを持つマップオブジェクトを持っています。ノードはid、x、yの位置にあります。 (上、下、左と右のピクセル)と私がここに来た所から知っているノードの参照など。

私はDijkstraの最短経路アルゴリズムとの違いを表現できたらいいと思う。それに応じてどうすれば修正できますか?それとも誰かがこれを行う別の方法をお勧めしますか?

+0

変更が必要な理由はわかりません。 A *スターとDijkstraの両方ともコストがかかります。どうしたの? – Ishtar

+0

@Ishtar私は、* 2種類のノードがあると思います。あなたが渡すことができ、あなたができないノード(壁)。私は間違っていますか? ダイクストラのために、私は頂点とエッジの使い方を知らない。私の場合はどちらも同じですが、一度ノードを渡すと、そのノードのコストが総コストに加算されます。 – user1125953

答えて

2

私はこの問題を知っていると思う。「いくつかのノードは非常にコストがかかっていて、いくらかはそうしない」アルゴリズムの実際の動作ではありません。問題をノード(コストなし)とエッジ(コスト付き)に変換する必要があります。それから、A *、Dijkstraまたは他のパス検索アルゴリズムを使用するのは簡単です。

あなたの場合、すべてのピクセルはノード/頂点です。すべてのピクセルには4つのエッジがあります(境界にあるものを除く)。エッジのコストは、宛先ピクセルのint値になります。

また、ノードにノード参照を保持しないでください。ノードの参照先は、アルゴリズムのジョブで、どこから来たのかを記録しておく必要があります。

これが役に立ちます。

+0

ありがとうございます。私はあなたのようには思わない、私はアルゴリズムがそのような場合に働くことができると思う。私はちょうど確かな道が常にあることを強調しようとしました。私はそれに応じて整数値を与えます、心配しないでください。私は、この例ではノードとエッジを分離する点は見当たりません。そのように実装すると、エッジが紛らわしいと思います。なぜなら、xとyは2つのノードであると言うことができます。 xとyの間のエッジのコストは、yとxの間のエッジのコストと異なる必要があります。私があなたをよく理解できないと思ったら、もっと説明してください。 – user1125953

+1

あなたは私を完全に理解していると思います。あなたは選択肢を混乱させるエッジとよく知られたアルゴリズムまたはアルゴリズムの混乱した修正をしなければなりません。 IMHOでエッジを追加すると、アルゴリズムが正しいことを心配する必要はありません。 (利用可能な実装がたくさんあります) – Ishtar

+0

私はC#の実装をお勧めしますか?私は1つを見つけたが、それは何か間違っていると思う:) – user1125953

関連する問題