-1

シミュレーションをコーディングする必要があり、ある位置から別の位置への最短の道を見つける方法が必要です。このメソッドは、開始位置と最終位置のみを取得し、位置間の最短道路を表す位置のリストを返します。このようなもの:

public List<Tuple<int, int> ShortestRoad(Tuple<int,int> start, Tuple<int,int> end, int[,] park)
{//Code}

このメソッドにダイクストラ アルゴリズムを実装するにはどうすればよいですか?

4

2 に答える 2

7

A* 検索アルゴリズムを調べる必要があります。これは、ヒューリスティックを使用した幅優先検索アルゴリズムであり、高速化を実現します。

基本的に、A* アルゴリズムはDijkstra のアルゴリズムのような幅優先検索ですが、ヒューリスティックを使用するか、最短経路が何であるかを推測します (A* アルゴリズムにどのノードを調べたほうがよいかを伝えるヒントと言えます)。ヒューリスティックを使用すると、A* アルゴリズムはダイクストラのアルゴリズムよりもはるかに高速になります。これは、ダイクストラのアルゴリズムほど多くのノードを参照しないことが多いためです。

ただし、注意すべきことの 1 つは、ヒューリスティック関数 (2 つのノード間のコスト/距離の推測)が、指定されたノード間の実際のコストよりも決して小さくなってはならないということです。ヒューリスティック関数が生成する結果が小さい場合、A* アルゴリズムは必ずしも最適/最短/最小コストのパスを見つけるとは限りません。

ここで、いくつかの優れたアニメーションが必要な場合 (特に A* と Dijkstra のアルゴリズムの違いに関して)、Wikipedia で両方を検索してください。両方のアニメーション間で同じ環境で実行される、それぞれのアルゴリズムのアニメーションがあります。それらから、A* アルゴリズムの方が優れていることは簡単にわかります。

于 2013-04-27T19:14:19.993 に答える