求最短路径算法
2017-08-13 01:55
190 查看
public static int findPath(int[][] rout, boolean[] visited, int start, int end, int dist, int minDist) { visited[start - 1] = true; for (int i = 1; i < rout[start].length; i++) { dist += rout[start][i-1]; if (i != start && !visited[i-1]) { if (i == end) { if (dist < minDist || minDist == 0){ minDist = dist; } }else if(dist < minDist || minDist == 0){ minDist = findPath(rout,visited,i,end,dist,minDist); } } dist -= rout[start][i-1]; } visited[start-1] = false; return minDist; }
rout数组下标第一维从1开始,代表点的坐标,下标为0我预留记录路线图用,第二维代表点与点之间的距离,值为0代表不可达会直接跳过后面的寻址,visited数组用来标记哪些坐标被访问过,防止陷入无限递归中,start代表起点,end代表终点,dist记录当前寻址过的路线长度,minDist记录起点到终点最小路线长度。
核心思想无非两点:1.穷举,2.递归。我在此处有个优化的地方在于当我当前寻址过的路线已经大于已经得出的最小路线长度时候就会跳过这次搜寻过程。若结果minDist=0 那么代表起点无法到达终点。
相关文章推荐
- 最短路径算法
- 最大流的算法——Edmonds-Karp算法(最短路径增广算法)
- 【算法】图的最短路径(Dijkstra算法)
- 【经典算法】Dijkstra单源最短路径算法
- 最短路径的几种算法
- dijkstra 最短路径算法模板
- 最短路径算法
- 最短路径算法-dijkstra
- Floyd Warshell 算法求解多源点最短路径
- 最简单的最短路径算法 - Floyd_Warshall算法
- N-最短路径分词算法
- 最小生成树算法(Prime、Kruskal)和最短路径算法(Dijkstra、Floyd)
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- 最短路径算法之Dijkstra算法_Java实现
- 加权有向图----无环情况下的最短路径算法
- Dijkstra算法求单源最短路径
- 深入解析最短路径算法
- Dijkstra 最短路径算法 秒懂详解
- 【数据结构与算法】 PROJECT 3 有向图的最短路径实现 之 知识点
- [Dijkstra单源最短路径算法]算法思想速成