[Java]一个简单的计算有向赋权图最短距离的代码

本文介绍了一个在有向赋权图中寻找两点间最短距离的Java代码实现。通过读取图的数据,使用堆栈和链表数据结构,逐步遍历并更新最短路径。详细代码包括Mainclass.java、Map.java、List.java和PointHeap.java四个部分。
摘要由CSDN通过智能技术生成

在一个有向赋权图中寻找点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},
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值