在一个有向赋权图中寻找点a到点b的最短距离,是个简单问题。
写了段代码,记录在这里吧。
以下面的这个图为例:
计算从点0到点5的最短距离
解决方法:
(1)读取路线数据,用二维数组b[i][j],表示点i到点j可以走,距离为其数值。
(2)建立一个堆栈H,压入起点,堆栈的节点为这个点的编号和它可以到达的点的链表。
(3)弹出H最上面的点Last的可到达链表T的最后一个可以到达的点M,将这个点号压入H中。【1】如果H空了,则所有可能找完了。【2】如果T为空,则这个Last点找完了,可以弹出,继续寻找了。
(4)判断当前形成的H是不是表示找到了一个新的最短路径。【1】如果找到了,保存这个路径到rList[i],保存路径长度到rLen[i],表示起点到点i的最短路径和最短路径长度。【2】如果找到的路径长度大于之前找到的,则这个结果不必要保留,弹出这个点。
(5)重复(3)
运行结果为:
This is a program to calculate the shortest path of a map.
len=6
Path=0 3 6 5
代码如下:
【1】Mainclass.java
/**
* Created by Firwood on 14-9-23.
*/
public class Mainclass {
public static final int PointNum = 7;
public static void main(String[] args){
System.out.println("This is a program to calculate the shortest path of a map.");
/*
int [][] b = new int[PointNum][PointNum];
for(int i=0;i<PointNum;i++){
for(int j=0;j<PointNum;j++){
b[i][j] = 0;
}
}
b[0][1]=3;
b[0][3]=4;
b[1][2]=1;
b[1][4]=2;
b[2][4]=7;
b[3][4]=3;
b[3][1]=6;
*/
int[][] b = {
{0,2,0,1,0,0,0},
{0,0,0,3,10,0,0},
{4,0,0,0,0,5,0},
{0,0,2,0,2,8,4},