您的位置:首页 > 其它

poj 1258 【最小生成树】【prim】【纯模板】

2013-06-14 16:07 316 查看
就是模板- -

熟练起来

#include<iostream>
using namespace std;

const int inf = 0x3f3f3f3f;

int p[100][100];
int vis[100];
int lowc[100];

void input(int n){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
p[i][j]=inf;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>p[i][j];
}
}
}

int prim(int n){
int i,j,rp;
int minc,res=0;
memset(vis,0,sizeof(vis));
vis[0]=1;
for(i=1;i<n;i++)
lowc[i]=p[0][i];
for(i=1;i<n;i++){
minc=inf;
rp=-1;
for(j=0;j<n;j++){
if(0==vis[j]&&minc>lowc[j]){
minc=lowc[j];
rp=j;
}
}
if(inf==minc)return -1;
res+=minc;
vis[rp]=1;
for(j=0;j<n;j++){
if(0==vis[j]&&lowc[j]>p[rp][j])
lowc[j]=p[rp][j];
}
}
return res;
}
int main(){
int n;
while(cin>>n){
input(n);
cout<<prim(n)<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: