?? dijkstra.java
字號:
public class Dijkstra {
public static void dijkstra(int v,float[][] a,float[] dist,int []prev)
{//單源最短路徑問題的Dijkstra算法
int n=dist.length-1;
if (v<1 || v>n) return;
boolean[] s=new boolean[n+1];
//初始化
for (int i=1;i<=n;i++)
{
dist[i]=a[v][i];
s[i]=false;
if (dist[i]==Float.MAX_VALUE) prev[i]=0;
else prev[i]=v;
}
dist[v]=0;s[v]=true;
for (int i=1;i<n;i++)
{
float temp=Float.MAX_VALUE;
int u=v;
for (int j=1;j<=n;j++)
if ((!s[j])&&(dist[j]<temp)) {
u=j;
temp=dist[j];
}
s[u]=true;
for (int j=1;j<=n;j++)
if ((!s[j])&&(a[u][j]<Float.MAX_VALUE)) {
float newdist=dist[u]+a[u][j];
if (newdist<dist[j]) {
// dist[j]減少
dist[j]=newdist;
prev[j]=u;
}
}
}
}
public static void main(String args[])
{
float max=Float.MAX_VALUE;
float[][] a=new float[][]{{0,0,0,0,0,0},
{0,max,10,max,30,100},
{0,max,max,50,max,max},
{0,max,max,max,max,10},
{0,max,max,20,max,60},
{0,max,max,max,max,max}};
int v=1;
int n=5;
float[] dist=new float[n+1];
int[] prev=new int[n+1];
dijkstra(v,a,dist,prev);
for (int i=1;i<=n;i++)
if (i!=v)
System.out.println(v+"->"+i+" : "+dist[i]);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -