Dijkstra算法实现

当初在大学学数据结构这门课的时候,最短路径算法就一直没搞懂,今天碰巧在网上下载了个《数据结构强化班讲义》,看到里面有讲Dijkstra算法,而且还有实现的源码,但是里面并没有讲具体实现原理和步骤,遂到网上搜了一篇介绍Dijsktra算法原理的博文《Dijkstra算法初探》,看了看原理,觉得也没那么难,为什么当初自己就没搞懂呢,归根结底,还是自己太懒,没有探究到底的精神。既然没有那么难,我就想自己来实现一下于是经过半个多小时的编写调试,写出了如下代码,只是为了把算法实现出来,也就并没有做什么优化,写的比较乱。

#include<iostream>
void main()
{	
	int pathWeight[8][8]={  {0,32000,32000,32000,32000,32000,32000,32000},
				{300,0,32000,32000,32000,32000,32000,32000},
				{1000,800,0,32000,32000,32000,32000,32000},
				{32000,32000,1200,0,32000,32000,32000,32000},
				{32000,32000,32000,1500,0,250,32000,32000},
				{32000,32000,32000,1000,32000,0,900,1400},
				{32000,32000,32000,32000,32000,32000,0,1000},
				{1700,32000,32000,32000,32000,32000,32000,0}};     //图的邻接矩阵数组
	int i;
	int j;
	int k;
	int originateVec; //出发点
	int dist[8];    //出发点到各点的最短距离
	int map[8];     //如果map[n]=1;表示出发点到该点的最短距离已确定
	int minVec;
	int min;
	for(i=0;i<8;i++)
	{
		map[i]=-1;
	}
	scanf("%d",&originateVec);
	map[originateVec]=1;
	for(i=0;i<8;i++)
	{
		dist[i]=pathWeight[originateVec][i];
	}
	for(i=0;i<8;i++)
	{
		min=65535;
		for(j=0;j<8;j++)
		{
			if ((dist[j]<min)&&(map[j]!=1))
			{
				min=dist[j];
				minVec=j;
			}
		}
		map[minVec]=1;
		for(k=0;k<8;k++)
		{
			if (dist[k]>(dist[minVec]+pathWeight[minVec][k]))
			{
				dist[k]=dist[minVec]+pathWeight[minVec][k];
			}
		}
	}
	for(i=0;i<8;i++)
	{
		printf("%d->%d,%d\n",originateVec,i,dist[i]);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值