hdu 1863 畅通工程prim算法

来源:互联网 发布:软件方案怎么写 编辑:程序博客网 时间:2024/05/18 01:38
//prim算法#include<iostream>#include<string.h>using namespace std;#define data 1000000000int graph[210][210],n,m,num,lowcost[210],vis[210];int prim(int s){int mindata,sum=0,i,j,u;num=0;memset(vis,0,sizeof(vis));for(i=1;i<=m;i++){lowcost[i]=graph[s][i];}lowcost[s]=0;vis[s]=1;for(i=1;i<m;++i){mindata=data;for(j=1;j<=m;++j){if(!vis[j]&&lowcost[j]<mindata){u=j;mindata=lowcost[j];}}if(mindata==data)break;vis[u]=1;sum+=lowcost[u];num++;for(j=1;j<=m;++j){if(lowcost[j]>graph[u][j])lowcost[j]=graph[u][j];}}return sum;}int main(){int i,j,pa,pb,cost;while(cin >> n >> m&&n){for(i=0;i<=m;i++)for(j=0;j<=m;j++)graph[i][j]=data;//注意初始化的时候应该从0开始,否则prim函数里面会报错for(i=1;i<=n;i++){cin >> pa >> pb >> cost;graph[pa][pb]=graph[pb][pa]=cost;}int x=prim(1);if(num!=m-1) cout << '?' << endl;else  cout << x << endl;}return 0;}