您的位置:首页 > 其它

POJ 1258 Agri-Net 【最小生成树入门题目】

2017-09-04 21:09 369 查看
题意;

给出各个点之间的距离,求最小生成树。krual和prim都可以。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define mx 105
using namespace std;
int fa[mx],sum;
int n,ce;
struct aa{
int x,y,qu;
}ma[mx*mx]; //结构体数组开成2*mx大小,感觉自己是个智障
void init(){
// memset(vis, 0, sizeof(vis));
for(int i = 1; i < mx; i++ )
fa[i] = i;
sum=ce=0;
}
bool cmp(aa a,aa b){
return a.qu<b.qu;
}
int find(int x){
return x == fa[x] ? x : fa[x] = find(fa[x]);
}

int main(){
while(scanf("%d",&n)!=EOF){
init();
for(int i = 1; i <=n; i++)
for(int j=1; j <= n; j++){
ma[ce].x = i;
ma[ce].y = j;
scanf("%d",&ma[ce].qu);
ce++;
}
sort(ma,ma+ce,cmp);
for(int i = 0; i < ce; i++){
int x = ma[i].x,y = ma[i].y, qu = ma[i].qu;
int a=find(x),b=find(y);
if(a == b) continue;
else{
fa[a] = b;
sum += qu;
}
}
cout<<sum<<endl;

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  最小生成树