zoukankan      html  css  js  c++  java
  • hdu 最短路径的特殊运用

    1. #include <stdio.h>
    2. #define MAX 10000
    3. int path[MAX][MAX];
    4. bool sign[MAX][MAX];
    5. int ans;
    6. int n;
    7. int floyd()
    8. {
    9. for(int k=1; k<=n; k++)
    10. for(int i=1; i<=n; i++)
    11. for(int j=1; j<=n; j++)
    12. {
    13. if(i!=j && i!=k && k!=j) //自己与自己的边不存在
    14. {
    15. if(path[i][j] > path[i][k] + path[k][j]) //因为不可能再次出现最短路径所以一旦出现就是错误
    16. return -1;
    17. else if(path[i][j] == path[i][k] + path[k][j] && !sign[i][j]) //还需要判断是否计算过
    18. {ans--; sign[i][j] = true;} //重边可以去掉一个
    19. }
    20. }
    21. }
    22. int main()
    23. {
    24. //freopen("read.txt", "r", stdin);
    25. int T;
    26. scanf("%d", &T);
    27. int co = 1;
    28. while(T--)
    29. {
    30. printf("Case %d: ", co++);
    31. scanf("%d", &n);
    32. for(int i=1; i<=n; i++)
    33. for(int j=1; j<=n; j++)
    34. {scanf("%d", &path[i][j]); sign[i][j] = false;}
    35. ans = n*(n-1); //每个点到其它顶点的最多的边数,因为是有向的
    36. if(floyd() == -1)
    37. printf("impossible ");
    38. else
    39. printf("%d ", ans);
    40. }
    41. return 0;
    42. }





    附件列表

    • 相关阅读:
      匿名函数
      Python基础练习题5
      for循环实现一个注册小案例
      Python基础练习题4
      Python集合
      Python基础练习题3
      Python 元组和字典
      Python PEP8规范与python之禅
      Python基础练习题2
      常见的排序之冒泡排序
    • 原文地址:https://www.cnblogs.com/sober-reflection/p/e79e42884ffbe4d544b9fe3953432e3c.html
    Copyright © 2011-2022 走看看