java使用Dijkstra算法实现单源最短路径 Dijkstra算法是解决单源最短路径问题的经典算法,该算法由荷兰计算机科学家Edsger W. Dijkstra于1959年提出。单源最短路径问题是指在图中找出从给定顶点到其它任一顶点的最短路径。 单源最短路径问题的最优子结构性质是指,如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,那么P(k,s)必定是从k到s的最短路径。这意味着,如果我们已经知道从顶点i到k的最短路径和从k到s的最短路径,那么我们可以通过组合这两条路径来得到从i到s的最短路径。 Dijkstra算法的核心思想是按照各顶点与源点v间的路径长度的递增次序,生成到各顶点的最短路径。算法的步骤如下: 1. 初始化,设置源点v的距离为0,其他顶点的距离为∞。 2. 选择当前距离源点v最近的未标记顶点k。 3. 更新从源点v到k的距离,并标记k为已访问。 4. 重复步骤2、3,直到所有顶点都被标记为已访问。 java实现Dijkstra算法的代码如下: ```java public class Dijkstra { static int M = 10000; //(此路不通) public static void main(String[] args) { int[][] weight = { {0, 3, 2000, 7, M}, {3, 0, 4, 2, M}, {M, 4, 0, 5, 4}, {7, 2, 5, 0, 6}, {M, M, 4, 6, 0} }; int start = 0; int[] shortPath = Dijsktra(weight, start); for (int i = 0; i < shortPath.length; i++) { System.out.println("从" + start + "出发到" + i + "的最短距离为:" + shortPath[i]); } } public static int[] Dijsktra(int[][] weight, int start) { int n = weight.length; int[] shortPath = new int[n]; String[] path = new String[n]; int[] visited = new int[n]; for (int i = 0; i < n; i++) { path[i] = new String(start + "-->" + i); } shortPath[start] = 0; visited[start] = 1; for (int count = 1; count <= n - 1; count++) { int k = -1; int dmin = Integer.MAX_VALUE; for (int i = 0; i < n; i++) { if (visited[i] == 0 && weight[start][i] < dmin) { k = i; dmin = weight[start][i]; } } visited[k] = 1; 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; } } } return shortPath; } } ``` 该算法的时间复杂度为O(n^2),其中n是图中的顶点个数。该算法可以解决单源最短路径问题,但它不适合解决所有对之间的最短路径问题。如果需要解决所有对之间的最短路径问题,需要使用Floyd-Warshall算法。
- 粉丝: 5
- 资源: 924
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学校课程软件工程常见10道题目以及答案demo
- javaweb新手开发中常见的目录结构讲解
- 新手小白的git使用的手册入门学习demo
- 基于Java观察者模式的info-express多对多广播通信框架设计源码
- 利用python爬取豆瓣电影评分简单案例demo
- 机器人开发中常见的几道问题以及答案demo
- 基于SpringBoot和layuimini的简洁美观后台权限管理系统设计源码
- 实验报告五六代码.zip
- hdw-dubbo-ui基于vue、element-ui构建开发,实现后台管理前端功能.zip
- (Grafana + Zabbix + ASP.NET Core 2.1 + ECharts + Dapper + Swagger + layuiAdmin)基于角色授权的权限体系.zip