hdu1879------------prim算法模板
水题,和1102一样。还不如1863呢!今天好像把连通工程这种类型的题刷光了!嘿嘿嘿,掌握prim后刷一道过一道,好痛快!
AC:
#include<stdio.h>
#include<string.h>
int map[101][101];
int low[101];
int visit[101];
int n;
int prim()
{
int i,j,k,pos,min;
int result=0;
memset(visit,0,sizeof(visit));
pos=1;
visit[pos]=1;
for(i=1;i<=n;i++)
{
if(i!=pos)
low[i]=map[pos][i];
}
for(i=1;i<n;i++)
{
min=100000000;
for(j=1;j<=n;j++)
{
if(!visit[j]&&min>low[j])
{
min=low[j];
pos=j;
}
}
result+=min;
visit[pos]=1;
for(j=1;j<=n;j++)
{
if(!visit[j]&&map[pos][j]<low[j])
low[j]=map[pos][j];
}
}
printf("%d\n",result);
return 0;
}
int main()
{
int i,j,k;
int s,e,w,temp;
while(scanf("%d",&n)!=EOF&&n!=0)
{
for(i=1;i<=n*(n-1)/2;i++)
{
scanf("%d%d%d%d",&s,&e,&w,&temp);
if(temp==0)
map[s][e]=map[e][s]=w;
if(temp==1)
map[s][e]=map[e][s]=0;
}
prim();
}
return 0;
}