您的位置:首页 > 其它

求最短路径算法

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 那么代表起点无法到达终点。

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