文章
14
粉丝
80
获赞
0
访问
11.2k
//普里姆算法
#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已经在集合中
...
登录后发布评论
这个题的n和m代表的意思要仔细看一下,输入的数组格式不对