水题,和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;}