POJ1125 Stockbroker Grapevine

来源:互联网 发布:手机播放软件 编辑:程序博客网 时间:2024/05/21 17:52
考查点:最短路径
提交情况:1次WA
收获:学会了Floyd算法,用于求所有点之间的最短路径
AC_CODE:
  1. #include <stdio.h>
  2. #define MAX 101
  3. int A[MAX][MAX],edges[MAX][MAX],B[MAX];
  4. void floyd(int n)
  5. {
  6.     for(int i=0;i<n;i++)
  7.         for(int j=0;j<n;j++)
  8.             A[i][j]=edges[i][j];
  9.     for(int k=0;k<n;k++)
  10.         for(int i=0;i<n;i++)
  11.             for(int j=0;j<n;j++)
  12.                 if(A[i][k]+A[k][j]<A[i][j])
  13.                     A[i][j]=A[i][k]+A[k][j];
  14. }
  15. int main()
  16. {
  17.     int num,paris,v,cost,sum,minv,min,totalcost;
  18.     while(scanf("%d",&num))
  19.     {
  20.         if(num==0) break;
  21.         for(int i=0;i<num;i++)
  22.             for(int j=0;j<num;j++)
  23.             {
  24.                 if(i==j)
  25.                     edges[i][j]=0;
  26.                 else
  27.                     edges[i][j]=999999;
  28.             }
  29.         for(int i=0;i<num;i++)
  30.         {
  31.             scanf("%d",&paris);
  32.             for(int j=0;j<paris;j++)
  33.             {
  34.                 scanf("%d%d",&v,&cost);
  35.                 edges[i][v-1]=cost;
  36.             }
  37.         }
  38.         floyd(num);
  39.         min=100000;
  40.         for(int i=0;i<num;i++)
  41.         {
  42.             sum=0;
  43.             for(int j=0;j<num;j++)
  44.                 sum+=A[i][j];
  45.             if(sum<min)
  46.             {
  47.                 min=sum;
  48.                 minv=i;
  49.             }
  50.         }
  51.         totalcost=0;
  52.         for(int i=0;i<num;i++)
  53.             if(A[minv][i]>totalcost)
  54.                 totalcost=A[minv][i];
  55.         if(totalcost>999999)
  56.             printf("disjoint/n");//注意别忘了~WA可能就是因为没有加这句~
  57.         else
  58.             printf("%d %d/n",minv+1,totalcost);//又忘了/n!!! 晕了~
  59.     }
  60.     return 0;
  61. }
排名:12085
突然想也把排名记在这里吧,记录一下走过的足迹~可惜前面的没记~每当看到排名前一点都挺高兴的~呵呵。其实现在因为排名太后了,所以每提交一个题都会进很多的名次~
第一个最短路径问题,是Floyd算法,edges[i][j]初始化时,对角线元素都为0,而没有路径的为无穷大。Floyd算法的时间复杂度为O(n3),其实在写的时候,一直都在想会不会很慢,会超时,可是结果时间是0MS~奇怪~当然了,也有可能是OJ的时候测试数据比较少~不过以后再用O(n3)的算法时就不会太担心了~呵呵。
原创粉丝点击