UVA 567 最短路水题
2013-09-27 20:28
453 查看
汝佳大神小白书的一道图论水题
点就20个,数据非常水
这道题最靓的点是数据输出格式要左对齐,还好数据小
dijkstra floyd啥的都可以随便水过
点就20个,数据非常水
这道题最靓的点是数据输出格式要左对齐,还好数据小
dijkstra floyd啥的都可以随便水过
#include <cstdio> #include <cstring> #define MAX 5000000 int S[25][25], d[25]; bool vis[25]; int fst, nd, q, st, ed, it; int main() { //freopen("1.txt", "r", stdin); it = 0; while(scanf("%d", &fst) != EOF) { it++; printf("Test Set #%d\n", it); memset(S, 0, sizeof(S)); for(int i = 1; i <= fst; i++) { scanf("%d", &nd); S[1][nd] = S[nd][1] = 1; } for(int i = 2; i <= 19; i++) { scanf("%d", &fst); for(int j = 1; j <= fst; j++) { scanf("%d", &nd); S[i][nd] = S[nd][i] = 1; } } scanf("%d", &q); for(int i = 1; i <= q; i++) { memset(vis, 0, sizeof(vis)); for(int j = 1; j <= 20; j++) d[j] = MAX; scanf("%d%d", &st, &ed); d[st] = 0; for(int j = 1; j <= 20; j++) { int mi = MAX; nd = 0; for(int k = 1; k <= 20; k++) if(!vis[k] && d[k] < mi) { mi = d[k]; nd = k; } if(!nd) break; vis[nd] = true; for(int k = 1; k <= 20; k++) if(!vis[k] && S[nd][k] && d[k] > d[nd] + S[nd][k]) d[k] = d[nd] + S[nd][k]; } if(st < 10) printf(" %d", st); else printf("%d", st); printf(" to "); if(ed < 10) printf(" %d:", ed); else printf("%d:", ed); if(d[ed] < 10) printf(" %d", d[ed]); else printf("%d", d[ed]); printf("\n"); } printf("\n"); } }
相关文章推荐
- GAR路由器的基本操作
- POJ 3096 Surprising Strings
- 对比 PL/SQL profiler 剖析结果
- C#属性
- PHPExcel按单元格读取数据
- 查看人人网非好友的状态
- PHP中文汉字验证码
- C++的三大特性
- paip.提升用户体验=----c++ qt 字体切换功能缺少的总结..
- log4j.properties配置详解
- 设计模式之(二)Adapter模式
- hive优化要点总结
- java 泛型编程(一)
- 数据结构3(双向链表)
- WPF Image显示本地照片 判断选择删除
- 状态开关按钮(ToggleButton)与开关(Switch)的功能与用法
- HDU 4099 Revenge of Fibonacci (数学+字典数)
- SQLServer2008和Oracle10g分页存储过程
- 【FZU】Problem 1411 最长配对子串
- Linux查看CPU和内存使用情况