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); } }
相关文章推荐
- NOIp 2011 瑞士轮
- 【java算法】二叉树遍历、求叶子数--用递归的方法
- Linux IPC
- 两个类A和B,A创建的对象可以计算两个整数的最大公约数,B创建的对象可以求最好公倍数,B类中成员变量是A类声明对象
- linux基本操作命令
- 笔记
- ExtJs之Ext.core.DomQuery
- 【ZOJ】[3878]Convert QWERTY to Dvorak
- Web前端:简洁美观的HTML图片上传UI框架
- iOS中代理属性用Weak修饰
- StatisticalOutlierRemoval滤波器
- poj-3176-Cow Bowling
- ACM成员博客
- 面试题选择的第几个radio
- svn - 3
- 第四周项目四-程序分析(4)
- javaWeb:http响应状态码大全
- 2.20 程序理解和时间分析
- LA 3695(p52)----Distant Galaxy
- iOSDay14之OC NSNumber + NSValue