您的位置:首页 > 其它

HDOJ1301 prim

2016-05-26 20:53 471 查看
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn=100;
const int inf=999999999;
int c[maxn][maxn];
int dist[maxn];
int s[maxn];
int n;
int prim()
{
memset(s,0,sizeof(s));
int i,j;
int u=0;
int len=0;
for(i=0;i<n;i++)
dist[i]=c[0][i];
s[0]=1;
for(i=0;i<n-1;i++)
{
int Min=inf;
for(j=0;j<n;j++)
if(!s[j]&&dist[j]<Min)
{
Min=dist[j];
//cout<<"M"<<Min<<" ";
u=j;
}
//if(Min==inf) return -1;
//cout<<Min<<endl;
len+=Min;
s[u]=1;
for(j=0;j<n;j++)
{
if(!s[j]&&dist[j]>c[u][j])
dist[j]=c[u][j];
}
}
return len;
}
int main()
{
//freopen("a.txt","r",stdin);
while(cin>>n&&n)
{
int i,j;
int si,sj;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
if(i==j) c[i][j]=0;
else c[i][j]=inf;
dist[i]=inf;
}
for(i=0;i<n-1;i++)
{
char a;
int number;
cin>>a>>number;
si=a-'A';
while(number--){
char b;
int len;
cin>>b>>len;
sj=b-'A';
if(len<c[si][sj])
c[si][sj]=c[sj][si]=len;
}
}
/*for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<c[i][j]<<" ";
cout<<endl;
}     */
cout<<prim()<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: