hdu 4034 Graph解题报告-Floyd思想
2012-04-23 09:42
507 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034
题目描述:给你一个n*n矩阵来表示一个图,矩阵的每个元素gij都表示i点到j点的最短路,其中对角线元素总是0。问满足这个矩阵的图的最少边数是多少,若不存在,则输出impossible。
显然,边数最多的情况是每两点之间都有最短的直边相连,边数最多为n2-n,在每两点都有最短直边相连情况下,我们以一一删去多余的边,最后就是最终结果。 考虑:若gij = gik + gkj ,i 与 j的这条边可以删去,因为i到j的最短路gij可以由gik+gkj转移来;若gij > gik + gkj ,则说明矩阵的gij并不是最短路,存在矛盾,此时则不存在这样的图,输出impossible。
还有,需要注意的是,每条边最多被删去一次,所以当一条边被删去时,需要标记,防止多次被删。
代码如下:
View Code
题目描述:给你一个n*n矩阵来表示一个图,矩阵的每个元素gij都表示i点到j点的最短路,其中对角线元素总是0。问满足这个矩阵的图的最少边数是多少,若不存在,则输出impossible。
显然,边数最多的情况是每两点之间都有最短的直边相连,边数最多为n2-n,在每两点都有最短直边相连情况下,我们以一一删去多余的边,最后就是最终结果。 考虑:若gij = gik + gkj ,i 与 j的这条边可以删去,因为i到j的最短路gij可以由gik+gkj转移来;若gij > gik + gkj ,则说明矩阵的gij并不是最短路,存在矛盾,此时则不存在这样的图,输出impossible。
还有,需要注意的是,每条边最多被删去一次,所以当一条边被删去时,需要标记,防止多次被删。
代码如下:
View Code
#include <stdio.h> #include <string.h> int main () { int g[101][101], vis[101][101]; int T, n; scanf("%d", &T); for (int t = 1; t <= T; t++) { scanf("%d", &n); memset(g, 0, sizeof(g)); memset(vis, 0, sizeof(vis)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &g[i][j]); } } int ans = n * (n-1); for (int k = 0; k < n; k++) { for (int i = 0; i < n; i++) { if (i == k) continue; for (int j = 0; j < n; j++) { if (j == i || j == k) continue; if (!vis[i][j] && g[i][j] == g[i][k] + g[k][j]) { ans--; vis[i][j] = 1; } if (g[i][j] > g[i][k] + g[k][j]) { ans = -1; break; } } if (ans == -1) break; } if (ans == -1) break; } printf("Case %d: ", t); if (ans == -1) { printf("impossible\n"); } else { printf("%d\n", ans); } } return 0; }
相关文章推荐
- hdu 4034 Graph解题报告-Floyd思想
- HDU 4034 Graph(Floyd变形)
- hdu 4034 Graph(floyd)
- HDU 4034 Graph(Floyd变形——逆向判断)
- hdu 4034 Graph(深化最短路floyd)
- hdu 4034 Graph(floyd)
- hdu 4034 Graph (floyd)
- hdu 4034 Graph(floyd)
- hdu 4034 Graph(逆向floyd)
- HDU - 4034 Graph (Floyd)
- hdu 3631 Shortest Path floyd 解题报告
- hdu 4034 Graph (floyd的深入理解)
- hdu 5418 Victor and World 最短路 floyd 解题报告
- HDU-4467 Graph 类似于分段函数的思想的解题技巧
- HDU 4034 Graph【最短路之floyd变形】
- HDU 4034 Graph(Floyd)
- HDU 4034 Graph(11年成都 Floyd运用)
- HDU 4034 Graph(11年成都 Floyd运用)
- hdu 4034 Graph(逆向floyd)
- HDU 4034 Graph(Floyd变形)