自己写了下prim(),以前都是用模版的,发现写一次可以更好有助于理解。
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=203
题目没看,算了一下发现时最小支撑树就用prim去做了,不过ZOJ的输出实在恶心,特别是水题的输出一般比较BT。PR了多次。
简单的Prim算法,只返回最小路径长,需要返回其他参数可以做适当修改。
double prim()
{
int i,j,nd1,nd2,num;
double lenn=0,max;
node[0]=true;
num=1;
while(num<n)
{
max=10000000;
for(i=0;i<n;i++)
{
if(node[i])
{
for(j=0;j<n;j++)
{
if(node[j]) continue;
else if(map[i][j]<max) {max=map[i][j];nd1=i;nd2=j;}
}
}
}
num++;
node[nd2]=true;
lenn+=map[nd1][nd2];
}
return lenn;
}