(迪杰斯特拉)Dijkstra算法 与 普里姆算法(Prim算法)

本文探讨了Dijkstra算法和Prim算法之间的相似性,指出它们在寻找最短路径问题上的核心思想。Dijkstra算法通过更新节点的最短距离来找到最省钱的路径,而Prim算法则以边为中心,利用并查集判断边连接的节点是否在同一集合,构建最小生成树。
摘要由CSDN通过智能技术生成

怎么硕呢

这俩肯定是一个人抄了另一个人的代码。就在花费那一部分  一个是d[u] = mp[u][v]+d[v] (迪杰斯特拉)  另一个是d[u] = mp[u][v]

大体思路就是一直找和以之节点相通的节点之间最省钱的路径就完了。

相比较克鲁斯卡尔来说,一个是以点展开验证边。而克鲁斯卡尔是以边为展开看连接点点是否属于都一个跟(并查集)

迪杰斯特拉:

#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f
//测试样例
//4 6
//1 2 1 
//1 3 4 
//1 4 1 
//2 3 3 
//2 4 2 
//3 4 5 
int vis[100];
int money[100][100];
int n;
void Dijkstra(int x)
{
	int v,u;
	int d[100];
	int p[100];
	memset(d,INF,sizeof(d));
	memset(vis,0,sizeof(vis));
	memset(p,-1,sizeof(p));
	d[x]=0;
	
	while(1){
		u=-1;
		int minv=INF;
		for(int i=0;i<n;i++){
			if(d[i]<minv&&vis[i]!=1){
				minv=d[i];
				u=i;
			}
		}
		if(u==-1) break;
		vis[u]=1;
		for(v=0;v<n;v++){
			if(money[u][v]!=INF&&vis[v]!=1)
			{
				if(d[v]>money[u][v]+d[u])
				{
					d[v]=money[u][v]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值