私はDjikstraのことを学んでいます.Djikstraとは少し違う考え方に基づいて以下のコードを用意しました。 今、多くのウェブサイトで、私はExtract minとboolean array of visited edgesの使用を見てきました。 私はnoneを使いましたが、私の答えも正しいです。私のalgoが動作しないテストケースやシナリオはありますか?Djikstraの最短経路アルゴリズム
import java.util.*;
class ShortestPath2
{
static int Ar[][];
static int dist[];
static int nodes;
public static void djikstra(int source)
{
LinkedList<Integer> list=new LinkedList<Integer>();
dist[source]=0;
list.add(source);
while(!list.isEmpty())
{
source=list.removeFirst();
for(int i=0;i<nodes;i++)
{
if(Ar[source][i]!=0)
{
if(dist[i]>dist[source]+Ar[source][i])
{
dist[i]=Math.min(dist[i],dist[source]+Ar[source][i]);
list.add(i);
}
}
}
}
System.out.println(Arrays.toString(dist));
}
public static void main(String[] args)
{
nodes=9;
Ar=new int[nodes][nodes];
dist=new int[nodes];
Arrays.fill(dist,Integer.MAX_VALUE);
Ar=new int[][]{{0, 4, 0, 0, 0, 0, 0, 8, 0},
{4, 0, 8, 0, 0, 0, 0, 11, 0},
{0, 8, 0, 7, 0, 4, 0, 0, 2},
{0, 0, 7, 0, 9, 14, 0, 0, 0},
{0, 0, 0, 9, 0, 10, 0, 0, 0},
{0, 0, 4, 14, 10, 0, 2, 0, 0},
{0, 0, 0, 0, 0, 2, 0, 1, 6},
{8, 11, 0, 0, 0, 0, 1, 0, 7},
{0, 0, 2, 0, 0, 0, 6, 7, 0}
};
djikstra(0);
}
}
:http://codereview.stackexchange.com/ –
@JohnColeman彼らは」心臓発作を起こすでしょう! OP:**あなたのコードを適切にフォーマットする方法を学んでください**。これは判読不能です。それは正常に動作しますか?訪問したノードを追跡するためにリンクリストを使用しているようですが、反復ごとに訪問先ノードのセットから最も短いホップを確実に選択する方法はありますか?いずれの場合でも、リンクされたリストはこのジョブの間違ったデータ構造です。最小ヒープを使用すると、コードは大きなデータセットで数桁の速さで実行されます。 –
@Tempuxああ、私は今それを見る。そして、私は頭痛を覚えています。私はここから出ています... –