您的位置:首页 > 理论基础 > 计算机网络

http://acm.nyist.net/JudgeOnline/problem.php?pid=434

2011-10-24 20:47 405 查看
一道最小生成树的题,属于模板题,,,,月赛竟然弄了这么长时间,才AC,这道替我用的是prim算法,用krusal也可以,,,

#include<iostream>
#include<string.h>
#include<algorithm>
#define N 28
#define M 99999999
using namespace std;
int map

;
int dist
;
bool visit
;
int n,m;
void prim()
{ int i,j;
for( i=1;i<=m;++i)
{ dist[i]=M;
visit[i]=true;
}
int now=1;
dist[now]=0;
visit[now]=false;
int ans=0;
for( i=1;i<=m;i++)
{ ans+=dist[now];
for( j=1;j<=m;++j)
if(visit[j]&&dist[j]>map[now][j])
dist[j]=map[now][j];
int minx=M;
for(j=1;j<=m;j++)
if(dist[j]<minx&&visit[j])
minx=dist[now=j];
visit[now]=false;
}
cout<<ans<<endl;

}
int main()
{ while(cin>>n&&n)
{ int nn,i,j,s,aa,bb;
char ch,mm;
m=0;
for( i=1;i<=28;++i)
for( j=1;j<=28;j++)
map[i][j]=M;
for( i=1;i<=n-1;++i)
{ cin>>ch;
bb=(int)(ch-64);
cin>>nn;
for( j=1;j<=nn;++j)
{ cin>>mm;
cin>>s;
aa=(int)(mm-64);
if(aa>m) m=aa;
if(map[bb][aa]>s)
{ map[bb][aa]=s;
map[aa][bb]=s;
}
}
}
prim();
}return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法