考查点:最小生成树
提交情况:1次TLE 2次WA
收获:当有多组数据而题目中没有说什么情况下退出时,用while(scanf()!=EOF)判断,否则TLE~
AC_CODE:
- #include <stdio.h>
- bool visited[101];
- int lowcost[101],mincost,roads[101][101],min;
- int prim(int n)
- {
- int min_v;
- visited[0]=true;
- mincost=0;//开始忘了,导致2次WA~粗心呐~
- for(int i=0;i<n;i++)
- lowcost[i]=roads[0][i];
- for(int i=1;i<n;i++)
- {
- min=1000000;
- for(int j=0;j<n;j++)
- if(visited[j]==false&&lowcost[j]<min)
- {
- min=lowcost[j];
- min_v=j;
- }
- visited[min_v]=true;
- mincost+=min;
- for(int j=0;j<n;j++)
- if(visited[j]==false&&roads[min_v][j]<lowcost[j])
- lowcost[j]=roads[min_v][j];
- }
- return mincost;
- }
- int main()
- {
- int n;
- while (scanf("%d",&n)!=EOF)
- {
- if(n==0) break;
- for(int i=0;i<n;i++)
- visited[i]=false;
- for(int i=0;i<n;i++)
- for(int j=0;j<n;j++)
- scanf("%d",&roads[i][j]);
- printf("%d/n",prim(n));
- }
- return 0;
- }