ZOJ-1589
2014-05-03 11:29
337 查看
好几天没写了。。前两天工作中要改UI的一个控件,看了N天ExtJs源码。。蛋疼死了,调JS BUG真心让人抓狂。言归正传,本题就是用Floyd算法求图的闭包传递,本来我自己写的算法是还用了另个矩阵保存了前次DP的结果,后来参考了别人代码里发现他们的DP矩阵都是直接刷新到当前矩阵的,这块还不是很理解,DP题一道都没搞过,最后还是把临时矩阵去掉了,以后做DP题时的时候可以深入理解下
#include<stdio.h> #include<string.h> static int map[26][26]; void floyd(int n) { int i, j, k; for (k = 0; k <= n; k++) for (i = 0; i <= n; i++) for (j = 0; j <= n; j++) map[i][j] = map[i][j] || (map[i][k] && map[k][j]); } int main() { int n, m, i, j, t, a, b, x[100], y[100]; char s[4]; scanf("%d", &n); for (t = 1; t <= n; t++) { printf("Case %d:\n", t); scanf("%d", &m); getchar(); memset(map, 0, sizeof(map)); int temp, max = -1; for (i = 0; i < m; i++) { gets(s); if (s[1] == '<') { a = s[0] - 'A'; b = s[2] - 'A'; } else { a = s[2] - 'A'; b = s[0] - 'A'; } map[a][b] = 1; x[i] = a; y[i] = b; temp = a > b ? a : b; if (temp > max) max = temp; } floyd(max); for (i = 0; i < m; i++) map[x[i]][y[i]] = 0; int flag = 0; for (i = 0; i <= max; i++) for (j = 0; j <= max; j++) if (map[i][j]) { flag = 1; printf("%c<%c\n", i + 'A', j + 'A'); } if (!flag) puts("NONE"); } return 0; }
相关文章推荐
- ZOJ 1589 Professor John【暴力解决】【待改进】
- zoj 1589 Professor John(Dijkstra~)
- zoj 1589
- ZOJ-1589 Professor John
- zoj 1589 Professor John 尚有点小疑问
- zoj 1589 Professor John
- ZOJ 1589 Professor John (图的传递闭包)
- zoj 1589 传递闭包
- ZOJ 1589 Professor John(传递闭包)
- TOJ 2933 ZOJ 1589 Professor John / floyd
- ZOJ 1589 Professor John
- ZJU2012.02月赛 F题(ZOJ 3576)
- [DFS]FJSDFZOJ 1261 整数拆分
- ZOJ 3591 Nim 前缀和+位运算
- ZOJ 3471 状压DP
- zoj 1610 Count the Colors
- ZOJ 3753 Simple Equation
- zoj 2949 Coins of Luck 抛硬币(概率(期望)+dp)
- ZOJ 2343 Robbers(思路)
- zoj 1406 - Jungle Roads