文章

14

粉丝

80

获赞

0

访问

11.2k

头像
1312 畅通工程
我要提问
发布于2024年3月5日 21:00
阅读数 406

//普里姆算法
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f //定义无穷大
const int maxn=100+5;
int mpt[maxn][maxn];//邻接矩阵
int dist[maxn];//距离数组,dist[i]表示点i到集合的最近距离
int main(){
	int n,m;
	while(cin>>n){
		if(n==0) break;
		cin>>m;
		//初始化邻接矩阵和距离数组
		for(int i=0;i<m;i++){
			dist[i]=INF;
			for(int j=0;j<m;j++){
				if(i==j) mpt[i][j]=0;//如果i==j,道路成本为0
				else mpt[i][j]=INF;
			}
		}
		
		//读入n条道路
		for(int i=0;i<n;i++){
			int u,v,w;
			cin>>u>>v>>w;
			mpt[u][v]=min(mpt[u][v],w);//防止有重复边,若有,选择最小的值
			mpt[v][u]=min(mpt[v][u],w);
		}
		
		int sum=0;
		int flag=0;//判断是否选出了距离集合最近的点
		
		//先把点1加入集合,更新dist数组
		for(int i=1;i<=m;i++){
			dist[i]=mpt[1][i];
		}
		
		//选距离集合最近的且未加入集合的点加入集合,循环m-1轮
		for(int i=1;i<m;i++){
			int min_len=INF;
			int min_p=-1;
			for(int j=1;j<=m;j++){
				//if(min_len>dist[j]){
				if(min_len>dist[j]&&dist[j]!=0){//dist[j]==0说明j已经在集合中
			...
登录查看完整内容


登录后发布评论

1 条评论
snake VIP
2024年3月5日 21:16

这个题的n和m代表的意思要仔细看一下,输入的数组格式不对

赞(0)