用一維數(shù)組int [] dis 記錄V0頂點到各個頂點的最短路徑曹体,初始化dis數(shù)組后,這個dis數(shù)組中儲存的每個值都是未定的最短路徑值(不知道是不是最短)碟婆,之后算法的目的是:通過判斷和調(diào)整dis 撑螺,使得最終這個dis數(shù)組儲存的是V0到每個頂點的確定的最短路徑。
判斷的依據(jù):在所有未定的最短路徑值中撵儿,最小未定的最短路徑值一定是一個確定的最短路徑。
public static void main(String[] args) {
int MAX=65536;
boolean[] isFixed = {true,false,false,false,false,false};
// 使用鄰接矩陣來存儲圖
int[][] weight = {
{0,7,9,MAX,MAX,14},
{7,0,10,15,MAX,MAX},
{9,10,0,11,MAX,2},
{MAX,15,11,0,6,MAX},
{MAX,MAX,MAX,6,0,9},
{14,MAX,2,MAX,9,0}
};
//初始化最短路徑數(shù)組
int dis[] = {0,7,9,MAX,MAX,14};
for(int l1=1;l1<weight.length;l1++) {
int minWeight=MAX;
int fixedNode=0;
// 從未定值中找出最小的一個未定值
for(int l2=0;l2<weight.length;l2++) {
if(!isFixed[l2]&&minWeight>dis[l2]) {
minWeight=dis[l2];
fixedNode=l2;
}
}
// 最小未定值一定是一個確定的值
isFixed[fixedNode]=true;
// 對最小未定值連接的邊進行松弛操作狐血,更新dis數(shù)組
// 在所有剩下的未定值中淀歇,只需確保dis數(shù)組中下一個最小未定值是正確的即可
for(int l2=0;l2<weight.length;l2++) {
if((weight[fixedNode][l2]+dis[fixedNode])<dis[l2]) {
dis[l2]=weight[fixedNode][l2]+dis[fixedNode];
}
}
}
// 輸出
for(int l1=0;l1<dis.length;l1++) {
System.out.println(dis[l1]);
}
}