C++最短路径Dijkstra算法详解

本文详细解析了使用C++实现Dijkstra算法的过程,从定义数组和变量开始,逐步介绍如何处理图数据,初始化,以及通过队列进行最短路径搜索。通过示例说明了算法如何计算每个节点到起点的最短距离,并给出了完整的程序代码。
摘要由CSDN通过智能技术生成

第一步

定义数组和变量:

int f[101][101]; //将得到的数据转化成邻接矩阵
int ans[101];  //用来记录答案(从1到各点的最短路径)
int q1[105],l=0,r=1;  //队列,详见https://blog.csdn.net/a_n_d_y_s_u_n__/article/details/119543473
bool YN[101];  //记录一个点是否入队

然后初始化:

for(re int i=1;i<=n;++i){
   
		YN[i]=false;
		for(re int j=1;j<=n;++j){
   
			if(i!=j)
			    f[i][j]=MAXint;
			else
			    f[i][j]=0;    
		}
	} 

第二步

假设我们得到了一个这样子的图和数据


点数:6
边数:9
每条边相连的点以及边的权值:

1 2 7  //意思是:点1和点2之间有一条线,权值为7
1 3 9
1 6 14
2 4 15
2 3 10
3 6 2
3 4 11
6 5 9
4 5 6

将得到的点数,边数,每条边相连的点以及边的权值存下来

    re int n,m;
	cin>>n>>m;
    re int a,b,q;
	for(re int i=1;i<=m;++i){
   
		cin>>a>>b>>q;
		f[a][b]=f[b][a]=q;
	}

第三步

经过初始化,读入后,我们就要开始分析计算方法了,首先,写出一个表格

F 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值