您的位置:首页 > 其它

Dijkstra求最短路径

2016-03-23 21:53 357 查看
使用java求目标两点之间的最短路径

import java.util.ArrayList;
import java.util.List;

public class ShortBook {

int[][]  dataMap={
{-1,-1,10,-1,30,100},
{-1,-1,5,-1,-1,-1},
{-1,-1,-1,50,-1,-1},
{-1,-1,-1,-1,-1,10},
{-1,-1,-1,20,-1,60},
{-1,-1,-1,-1,-1,-1},
//			{-1,4,11},
//			{6,-1,2},
//			{3,-1,-1}
};
void shortestPath_DIJ(int star,int end){
int[]  Dcost = new int[dataMap[0].length];//用来记录最短路径的长度
int size = dataMap.length,minCostNode;
boolean finals[] = new boolean[size];
//标记节点是否已经被访问,false表示未被访问,true表示已经访问
finals[star] = true;
List shorestPathNode = new ArrayList(size);
shorestPathNode.add(star);
for (int i = 0; i < size; i++) {
Dcost[i] = dataMap[star][i];
//从起始节点开始赋值
}
print(Dcost);
for (int i = 0; i < size-1; i++) {
minCostNode = findMinNode(Dcost,finals);
//找目前为止具有最小代价的节点,也是当前最短路径所在节点
System.out.println("minCostNode:"+minCostNode);
if(Dcost[minCostNode]==-1){
//				System.out.println("game over");
break;
}else{
finals[minCostNode]=true;
shorestPathNode.add(minCostNode);
System.out.println(shorestPathNode);
if(minCostNode==end){
break;
}
for (int j = 0; j < size; j++) {
if(!finals[j]){
if(dataMap[minCostNode][j]!=-1){
if(Dcost[j]==-1 ||
(Dcost[minCostNode]+dataMap[minCostNode][j])0){
//如果minNode所在节点为无穷大,而i节点所在的值有穷,则把i赋值给minNode
minNode = i;

}else if(Dcost[minNode] > Dcost[i] && Dcost[i]>0){
//i所在节点有穷且比当前所在节点的代价还小
minNode = i;
}
}

}
return minNode;
}
void print(int data[]){
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]+"  ");
}
System.out.println();
}
public static void main(String[] args) {
ShortBook shorstPath = new ShortBook();
shorstPath.shortestPath_DIJ(2 ,5);
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: