#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<math.h>
#define inf 0x3f3f3f;
using namespace std;
int low[101],t,n,d[101][101],ans,m;
bool vis[101];
int prim()
{
ans=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)low[i]=inf;
t=1;vis[t]=1;
for(int j=1;j<=n-1;j++)
{
for(int i=1;i<=n;i++)
{
if(low[i]>d[t][i]&&vis[i]==0)
low[i]=d[t][i];
}
m=inf;
for(int i=1;i<=n;i++)
{
if(low[i]<m&&vis[i]==0)
{
m=low[i];
t=i;
}
}
vis[t]=1;
ans=ans+m;
}
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
scanf("%d",&d[i][j]);
}
printf("%d\n",prim());
}
return 0;
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<math.h>
#define inf 0x3f3f3f;
using namespace std;
int low[101],t,n,d[101][101],ans,m;
bool vis[101];
int prim()
{
ans=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)low[i]=inf;
t=1;vis[t]=1;
for(int j=1;j<=n-1;j++)
{
for(int i=1;i<=n;i++)
{
if(low[i]>d[t][i]&&vis[i]==0)
low[i]=d[t][i];
}
m=inf;
for(int i=1;i<=n;i++)
{
if(low[i]<m&&vis[i]==0)
{
m=low[i];
t=i;
}
}
vis[t]=1;
ans=ans+m;
}
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
scanf("%d",&d[i][j]);
}
printf("%d\n",prim());
}
return 0;
}
继上次模仿写了一次prim以后第二次写prim算法,一次AC,嘿嘿,加油。!