HDU1233

来源:互联网 发布:使用管家婆存入软件 编辑:程序博客网 时间:2024/04/30 21:31

最小生成树的模板;

//从别人那里偷看来的:

//嘻嘻

//下面是我偷看的地址,那里有比较详细的解释O.O,不过他的题目和我的题目是不一样的,但是也没什么本质上的区别;

http://www.cnblogs.com/Veegin/archive/2011/04/29/2032388.html

不用C的输入输出会超时哦;

#include<iostream>#include<string.h>#include<stdio.h>using namespace std;#define MaxInt 0x3f3f3f3f;int n;int map[101][101],low[101],visit[101];int prim(){    int i,j,pos,result=0;memset(visit,0,sizeof(visit));visit[1]=1;pos=1;for(i=1;i<=n;i++){if(i!=pos){low[i]=map[pos][i];}}for(i=1;i<n;i++){int min= MaxInt;for(j=1;j<=n;j++){if(visit[j]==0&&min>low[j]){min=low[j];pos=j;}}result+=min;visit[pos]=1;for(j=1;j<=n;j++){if(visit[j]==0&&low[j]>map[pos][j])low[j]=map[pos][j];}}return result;}int main(){while(scanf("%d",&n)!=EOF){if(n==0)break;int m=n*(n-1)/2,i,j,a,b,c;for(i=1;i<=n;i++){for(j=1;j<=n;j++)map[i][j]=MaxInt;}   for(i=1;i<=m;i++){scanf("%d%d%d",&a,&b,&c);map[a][b]=c;map[b][a]=c;}        int ans=prim();    printf("%d\n",ans);}}


0 0
原创粉丝点击