**题意:
给你个图,让你求一颗最小生成树。
思路:
裸题,克鲁斯卡尔或者普利姆都行。
#include
#include
using namespace std;
typedef struct
{
int a ,b ,c;
}NODE;
NODE node[100*100+10];
int mer[105];
bool camp(NODE a ,NODE b)
{
return a.c < b.c;
}
int finds(int x)
{
return x == mer[x] ? x : mer[x] = finds(mer[x]);
}
int main ()
{
int n ,i ,j ,ans;
while(~scanf("%d" ,&n))
{
int nowid = 0;
for(i = 1 ;i <= n ;i ++)
{
for(j = 1 ;j <= n ;j ++)
{
nowid++;
scanf("%d" ,&node[nowid].c);
node[nowid].a = i ,node[nowid].b = j;
}
mer[i] = i;
}
sort(node + 1 ,node + nowid + 1 ,camp);
ans = 0;
for(i = 1 ;i <= nowid ;i ++)
{
int x = finds(node[i].a);
int y = finds(node[i].b);
if(x == y) continue;
ans += node[i].c;
mer[x] = y;
}
printf("%d\n" ,ans);
}
return 0;
}
**
手机扫一扫
移动阅读更方便
你可能感兴趣的文章