题目链接:点击打开链接
水题一道,思路明确最小生成树,用prim做的,别的正在学习中。。。。。
不知道总么回事就RE,明明写的点数小于100我开到110就是RE,后来改成200A了……
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<memory.h> #define LEN 200 #define max 0x3f3f3f3f #include<limits.h> int map[LEN][LEN],lowcost[LEN],num; bool visit[LEN]; int min,flag; void prim() { int i,j,k; min=0; memset(visit,false,sizeof(visit)); visit[1]=true; for(i=1;i<=num;i++) lowcost[i]=map[1][i]; for(i=1;i<=num;i++) { flag=INT_MAX; for(j=1;j<=num;j++) if(!visit[j]&&flag>lowcost[j]) flag=lowcost[k=j]; if(flag==INT_MAX) break; min+=flag; visit[k]=true; for(j=1;j<=num;j++) if(!visit[j]&&lowcost[j]>map[k][j]) lowcost[j]=map[k][j]; } if(min>=max) printf("?\n"); else printf("%d\n",min); } int main() { int i,j,k,cost,sum,qqq; while(1) { scanf("%d%d",&qqq,&num); if(qqq==0) break; sum=num*num; memset(map,max,sizeof(map)); while(qqq--) { scanf("%d%d%d",&i,&j,&cost); map[i][j]=map[j][i]=cost; } prim(); } return 0; }