数据结构之 迪杰斯特拉最短路径算法

本文介绍了一种实现迪杰斯特拉最短路径算法的方法,包括两个主要函数:`dijKstra`用于计算从指定顶点到其他所有顶点的最短路径,`printfPath`用于打印从起始顶点到任意目标顶点的具体路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void printfPath(int path[],int a)
{
	int statck[maxSize],top=-1;
	while(path[a]!=-1)
	{
		statck[++top]=a;
		a=path[a];
	}
	statck[++top]=a;
	while(top!=-1)
	{
		cout<<statck[top--]<<" ";
	}
	cout<<endl;
}

//迪杰斯特拉 最短路径算法
void dijKstra(MGraph g,int v,int dist[],int path[])
{
	int set[maxSize];
	int min,i,j,u;
	for(i=1;i<=g.n;i++)
	{
		dist[i]=g.edges[v][i];
		set[0]=0;
		if(g.edges[v][i]<INFINITY)
			path[i]=v;
		else
			path[i]=-1;
	}
	set[v]=1;
	path[v]=-1;
	for(i=1;i<=g.n;i++)
	{
		min=INFINITY;
		for(j=1;j<=g.n;j++)
		{
			if(set[j]==0&&dist[j]<min)
			{
				u=j;
				min=dist[j];
			}
		}
		set[u]=1;
		for(j=1;j<=g.n;j++)
		{
			if(set[j]==0&&dist[u]+g.edges[u][j]<dist[j])
			{
				dist[j]=dist[u]+g.edges[u][j];
				path[j]=u;
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值