public class Dijsktra {

     public static void main(String[] args)
{
Dijsktra d=new Dijsktra();
int[][] w={{0,1},{2,0}}; int[] a=d.DijsktraWay(w,0);
//System.out.println(1111);
} // 返回来的是路径
public int[] DijsktraWay(int[][] weight, int start) { // 接受一个有向图的权重矩阵和一个起点编号start从0编号顶点存在数组中
// 返回一个int[] 数组表示从start到它的最短路径长度
int n = weight.length; // 顶点个数 int[] shortPath = new int[n]; // 存放从start到其他各点的最短路径
String[] path = new String[n]; // 存放从start到其他各点的最短路径的字符串表示
for (int i = 0; i < n; i++) {
path[i] = new String(start + ">" + i);
shortPath[i] = Integer.MAX_VALUE / 2;
}
int[] visited = new int[n]; // 标记当前该顶点的最短路径是否已经求出,1表示已求出
// 初始化第一个顶点求出
shortPath[start] = 0;//没有环
visited[start] = 1; // 表示已经访问过 for (int count = 1; count <= n - 1; count++) // 要加入n-1个顶点,每次加入一个点后
//就会有一个点被标记
{
int k = -1; // 选出一个距离初始顶点start最近的未标记顶点
int dmin = Integer.MAX_VALUE / 2;
for (int i = 0; i < n; i++) {
//如果此点未访问并且距离起始点距离较上一个的小,则应进行修改
if (visited[i] == 0 && weight[start][i] < dmin) {
dmin = weight[start][i];//表示距离起始点最近的点
k = i;//将距离起始点最近的点标记为k
}
} if (k == -1) {
break;
// return null;
}
// 将新选出的顶点标记为已求出最短路径且到start的最短路径就是dmin
shortPath[k] = dmin;
visited[k] = 1;
// 以k为中间点修正从start到未访问各点的距离
for (int i = 0; i < n; i++) {
if (visited[i] == 0 && weight[start][k] + weight[k][i] < weight[start][i]) {
weight[start][i] = weight[start][k] + weight[k][i];
path[i] = path[k] + ">" + i;
}
//System.out.println(shortPath[i]);
System.out.println( path[i]);
}
} return shortPath;
} }

确定起点的最短路径问题:即已知起始结点,求最短路径的问题。适合迪杰斯特拉算法。

确定终点的最短路径问题:与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径反转的确定起点的问题。

最新文章

  1. Beta版本冲刺第四天
  2. (十六)WebGIS中偏移补偿量引发的问题之探讨
  3. Convert HTML to Text(转载)
  4. hdu 4607 Park Visit 求树的直径
  5. HDU4871 Shortest-path tree(树分治)
  6. 关于fsockopen pfsockopen函数被禁用的解决方法
  7. hadoop pig入门总结
  8. Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介
  9. enable-ssh-key-logon-disable-password-password-less-logon-centos/
  10. [luogu5077][Tweetuzki 爱等差数列]
  11. Kafka技术内幕 读书笔记之(六) 存储层——日志的读写
  12. linux 系统备份和恢复
  13. 1.MFC架构分析
  14. 页面中onclick事件引号问题
  15. 前端性能优化:Add Expires headers
  16. Solidworks如何把装配体做成单个零件
  17. mybatis拦截器实现分页功能的示例讲解
  18. 8 云计算系列之Horizon的安装与虚拟机创建流程
  19. 通过ReentrantLock简单了解下并发包中的锁
  20. JS怎么计算html标签里文字的宽度

热门文章

  1. 使用 ssh 连接github的方法说明(gitub的官方说法)
  2. 将TP引擎改为smarty引擎
  3. 最短路径—Dijkstra算法
  4. MVC4 开篇
  5. 混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++
  6. [转]iOS 应用内付费(IAP)开发步骤
  7. Linux 进程通信(无名管道)
  8. JS案例之7——瀑布流布局(2)
  9. matlab批量合并txt文件
  10. ios——视频 MPMoviePlayerController的使用(支持本地和网络)