一、我们先画一个可达路径图表:
-1表示不可直达,0表示自己,其他整数表示长度或者权重
A | B | C | D | |
A | 0 | 1 | 2 | -1 |
B | -1 | 0 | 1 | 5 |
C | -1 | -1 | 0 | 1 |
D | -1 | -1 | -1 | 0 |
用图形可表示为:
二、算法思路
1、先列出所有保存所有节点到可达节点的路径二维表
2、逐步寻找从起始节点到下一步节点的最短路径,直到找到终节点。
三、代码实现
1、建立一个二维表:int[][]
2、建立一个最短路径对象和未结束的路径集合。
比如A到D的最短路径
①先从A找到下一个节点的路径和路径值,如果未到终点路径,保存该路径到set中
②循环遍历set,找到每个节点的下一个或几个节点。如果有到终点的,计算最短路径值,如
果是最短路径,同时保存到最短路径对象;如果没有到终点,则删除原来节点,保存新路径到set;
③再次执行②,如果没有新节点,则删除未到最终节点的路径,保留最新可达路径;
④输出最短路径