HDU 4034 Graph(Floyd)
2012-06-16 10:26
387 查看
题目链接
以前练习赛中的一个题,当时没学图论,听学长说是弗洛伊德,最近学了,又重新看了一下,用的很不熟练啊。。。在WA了3 4次之后,没浮躁,很不容易。。。
题目:给你有向图的最短路,判断是否存在,存在,可以留下的最小边数。
思路:想的时间有点长,先弗洛伊德一遍,判断是图中是否存在最短路,若有则直接输出不存在,再判断图中是否存在是否有p[j][k] ==p[j][i] + p[i][k]的边,就是这里,重复计算了,WA4次,唉,开始的时候也考虑的重复计算的问题,天真的加了个break,还是不熟悉啊。。。终于发现问题后,加了个标记数组后,A了。
以前练习赛中的一个题,当时没学图论,听学长说是弗洛伊德,最近学了,又重新看了一下,用的很不熟练啊。。。在WA了3 4次之后,没浮躁,很不容易。。。
题目:给你有向图的最短路,判断是否存在,存在,可以留下的最小边数。
思路:想的时间有点长,先弗洛伊德一遍,判断是图中是否存在最短路,若有则直接输出不存在,再判断图中是否存在是否有p[j][k] ==p[j][i] + p[i][k]的边,就是这里,重复计算了,WA4次,唉,开始的时候也考虑的重复计算的问题,天真的加了个break,还是不熟悉啊。。。终于发现问题后,加了个标记数组后,A了。
#include <stdio.h> #include <string.h> #define N 100000 int p[101][101],o[101][101]; int main() { int t,i,j,k,num = 0,n,sum,z; scanf("%d",&t); while(t--) { memset(o,0,sizeof(o)); z = 0; scanf("%d",&n); sum = n*n - n; num ++; for(i = 1; i <= n; i ++) for(j = 1; j <= n; j ++) { scanf("%d",&p[i][j]); } printf("Case %d: ",num); for(i = 1; i <= n; i ++) for(j = 1; j <= n; j ++) for(k = 1; k <= n; k ++) { if(p[j][k] > p[j][i]+p[i][k]) { z = 1; break; } } if(z) printf("impossible\n"); else { for(i = 1; i <= n; i ++) for(j = 1; j <= n; j ++) for(k = 1; k <= n; k ++) { if(p[j][k] == p[j][i]+p[i][k]&&i != j&&i != k&&j != k&&o[j][k] == 0) { sum --; o[j][k] = 1; } } printf("%d\n",sum); } } 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 4034 Graph (floyd)
- HDU 4034 Graph(11年成都 Floyd运用)
- HDU 4034 Graph(11年成都 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(floyd应用)