迪杰斯特拉(Dijkstra)算法--无向网络最短路径

与有向网络不同的是,无向网络的邻接矩阵是对称的,所以在构造邻接矩阵的时候要注意。Dijkstra算法的具体内容参照我上次写的迪杰斯特拉(Dijstra)算法——有向网络最短路径

下面直接放代码和实例,以便更加理解使用。

#include
#define max 1000                        //1000定义为最大值正无穷,表示两点之间不直接相通,或与自己相连接。
#define n 100                           //n表示一个范围,需要大于图的顶点数目,以便定义一个数组储存。n的具体值根据情况而定。
main()
{
	void DIJ(float C[n][n],int v);
	int i,j,k,e,r;
	float z;
	float a[n][n];                       //定义一个足够大的数组,用于储存图的数据。
	for(i=0;iD[k]+C[k][j]))//调整各蓝点的间距值
				{
					D[j]=D[k]+C[k][j];         //修改蓝点j+1到红点集的距离
					P[j]=k+1;                  //改变j+1的前驱为k+1
				}
	}										//所有顶点都扩充到S中
	for(i=0;i

有向网络和无向网络代码只有一行之差别,但是实际输出结果却大不相同。
下面以具体实例验证。
有向网络图
迪杰斯特拉(Dijkstra)算法--无向网络最短路径_第1张图片
把上面的有向网络图改成无向网络图
迪杰斯特拉(Dijkstra)算法--无向网络最短路径_第2张图片
邻接矩阵也发生变化
迪杰斯特拉(Dijkstra)算法--无向网络最短路径_第3张图片
以4为源点,输出结果对比如下
有向网络输出结果:
迪杰斯特拉(Dijkstra)算法--无向网络最短路径_第4张图片
无向网络输出结果:
迪杰斯特拉(Dijkstra)算法--无向网络最短路径_第5张图片
由以上可以看出两次输出结果截然不同。

下面以另一个例子作为验证。

下面是一个无向网络
迪杰斯特拉(Dijkstra)算法--无向网络最短路径_第6张图片
邻接矩阵在这里就不再给出。
以4为源点,输出结果如下
迪杰斯特拉(Dijkstra)算法--无向网络最短路径_第7张图片
如果按照上图输入,就可以得到上图结果。

你可能感兴趣的:(常用算法)