【考研学习】最短路径算法之迪杰斯特拉

  • 迪杰斯特拉算法的思想:我从一点开始,计算这个点到其他点的最短路径。想完成这样一件事,你需要做这些事情:
    ①得找一个“车道标记”,记录哪些点已经被你纳入路径当中了。
    ②得找一个“指示牌”,看看哪个点能够和你之前的通路产生联系。
    ③一个“GPS导航”,看看接下来是按照原路径走更近,还是抄新路更近。
    为此,准备以下工具:
    Ⅰ、dist[maxSize]:用来记录当前的最短路径长度。
    Ⅱ、path[maxSize]:用来记录走过的路径,这样当有新的点可以达到的时候,你可以通过path[vi-1]+d(新纳入点距离到可达点距离)和dist[vi]进行比较,取其中比较小的作为新的最短路径。
    Ⅲ、set[maxSize]:谁进来我就给谁标记成1,初识的点直接就是1。
void  Dikstra(MGraph g,int v,int dist[],int path[])//v是开始点
{
	int set[maxSize];//标识数组
	int min,i,j,u;//这是进行一些操作要用到的量
	for(i=0;i<g.n;++i)
	{
		dist[i] = g.edges[v][i];//初始化dist数组
		set[i]=0;//初始化set		
		if(g.edges[v][i]<INF)
			path[i]=v;
		else
			path[i]=-1;
	}
	set[v]=1;path[v]=-1;
	}//所有的工具全部就绪,开始工作吧
	for(i=0;i<g.n-1;++i)
	{
		min = INF;
		//最开始的最小是极小值
		for(j=0;j<g.n;++j)//通过这个循环可以筛选出现在可以达到的点中的最小值
			if(set[j]==0&&dist[j]<min)
			{
				u=j;
				min=dist[j];
			}	
		set[u]=1;
		for(j=0;j<g.n;++j)
		{//这个用来判断是否有新的最短路径
			if(set[j]==0&&dist[u]+g.edge[u][j]<dist[j])
			{
				dist[j]=dist[u]+g.edges[u][j];
				path[j]=u;
			}
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值