开始熟悉一下数据结构了
最小生成树之prim
代码
poj1258
#include<iostream>
using namespace std;
#include<cstring>
#define Maxint 0x3f3f3f3f
#define N 110
int map[N][N],low[N],vis[N];
int n;
int prim()
{
int i,j,pos,min,result=0;
memset(vis,0,sizeof(vis));
vis[1]=1;
pos=1;
for(i=1;i<=n;i++){
if(i!=pos)
low[i]=map[pos][i];
}
for(i=1;i<n;i++){
min=Maxint;
for(j=1;j<=n;j++)
if(vis[j]==0&&min>low[j]){
min=low[j];
pos=j;
}
result+=min;
//cout<<result<<' ';
vis[pos]=1;
for(j=1;j<=n;j++)
if(vis[j]==0&&low[j]>map[pos][j])
low[j]=map[pos][j];
}
return result;
}
int main()
{
int i,j,ans,v;
while(cin>>n){
memset(map,Maxint,sizeof(map));
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
cin>>v;
map[i][j]=map[j][i]=v;
}
}
ans=prim();
cout<<ans<<endl;
}
return 0;
}