#include<iostream>
using namespace std;
#define INFINITE 9999;
int e[100][100];
int main(){
int i,j,k,w;//得到图(邻接矩阵)
int n,m;
int sum=0;
int cnt=0;
int mins=INFINITE;
int min_index;
int dis[100],book[100]={};
cin >> n >> m;
for(i=1;i<=n;i++){
dis[i]=INFINITE;
for(j=1;j<=n;j++)
{
if(i==j)
e[i][j]=0;
else
e[i][j]=INFINITE;
}
}
for(i=1;i<=m;i++){
cin >> j >> k >> w;
e[j][k]=e[k][j]=w;
}
book[1]=1;cnt++;//把1号顶点放入dis数组中,更新数组(距离),
for(i=2;i<=n;i++){
if(dis[i]>e[1][i])
dis[i]=e[1][i];
}
while(cnt<n){//重复n次,每次放入前sum+dis【】距离
for(i=1;i<=n;i++){
if(book[i]==0){
if(dis[i]<mins ){
mins=dis[i];
min_index=i;
}
}
}
book[min_index]=1;sum+=dis[min_index];cnt++;
mins=9999;
for(i=1;i<=n;i++){
if(book[i]==0&&dis[i]>e[min_index][i])
dis[i]=e[min_index][i];
}
cout << "dis " ;
for(i=1;i<=n;i++)
cout << dis[i] <<' ' ;
cout << endl;
}
cout << sum;
return 0;
}
最小生成树(Prim)
最新推荐文章于 2023-01-19 21:17:41 发布