| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 44487 | Accepted: 18173 |
Description
Input
Output
Sample Input
4 0 4 9 21 4 0 8 17 9 8 0 16 21 17 16 0
Sample Output
28
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define maxn 110
#define inf 1<<29
int Map[maxn][maxn],vis[maxn],low[maxn];
int n;
//第一种
void prim()
{
int Min,pos,sum=0;
for(int i=1;i<=n;i++)
{
low[i]=Map[1][i];
vis[i]=0;
}
for(int i=1;i<=n;i++)
{
Min=inf;
for(int j=1;j<=n;j++)
{
if(!vis[j] && low[j]<Min)
{
pos=j;
Min=low[j];
}
}
vis[pos]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j] && low[j]>Map[pos][j])
low[j]=Map[pos][j];
}
}
for(int i=1;i<=n;i++)
sum+=low[i];
printf("%d\n",sum);
}
/*第二种
void prim()
{
int Min,pos,sum=0;
memset(vis,0,sizeof(vis));
vis[1]=1,pos=1;
for(int i=1;i<=n;i++)
{
if(i!=pos)
low[i]=Map[pos][i];
}
for(int i=1;i<n;i++)
{
Min=inf;
for(int j=1;j<=n;j++)
{
if(!vis[j] && low[j]<Min)
{
Min=low[j];
pos=j;
}
}
sum+=Min;
vis[pos]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j] && low[j]>Map[pos][j])
low[j]=Map[pos][j];
}
}
printf("%d\n",sum);
}
*/
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&Map[i][j]);
prim();
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/kaisa158/article/details/46973409