uva208 -Firetruck (双向搜索进行剪枝)
来源:互联网 发布:linux 禁止执行rm rf 编辑:程序博客网 时间:2024/04/29 21:13
题意:
给你一个图,1为起始节点,END为终止节点,让你打印起始到终点的所有路径。
思路:
深搜+回溯,超时了,看到一种解释是这样的,不是所有的路都能到达终点,比如从南京到北京,地图上各种路,东西南北乱走一通是不行的。
解决方法即剪枝,从终点搜索确定出可到达终点的路线。
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 25;int ege[N][N],route[N],vis[N],a[N][N];int END, n, routeCnt, len;void dfs(int cur) { if (cur == END) { printf("1"); for (int i = 0; i < len; i++) { printf(" %d", route[i]); } printf("\n"); routeCnt++; return; } for (int i = 1; i <= n; i++) { if (ege[cur][i] && !vis[i]&&a[END][i]) { route[len++] = i; vis[cur] = 1; dfs(i); vis[cur] = 0; len--; } }}int main() { int cas = 0; while (~scanf("%d", &END)) { int u, v; n = 0; routeCnt = 0; len = 0; memset(ege, 0, sizeof(ege)); memset(vis, 0, sizeof(vis)); memset(route, 0, sizeof(route)); memset(a,0,sizeof(a)); while (scanf("%d%d", &u, &v) && (u&&v)) { ege[u][v] = ege[v][u] = 1; a[u][v] = a[v][u] = 1; n = max(n, max(u, v)); } printf("CASE %d:\n", ++cas); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) for (int k = 1; k <= n; k++) if (a[i][j] && a[j][k]) a[i][k] = a[k][i] = 1; dfs(1); printf("There are %d routes from the firestation to streetcorner %d.\n", routeCnt,END); } return 0;}
0 0
- uva208 -Firetruck (双向搜索进行剪枝)
- UVa 208 - Firetruck,双向搜索进行剪枝
- [回溯&&剪枝]Firetruck UVA208
- UVA208 Firetruck 【搜索】
- uva208 - Firetruck
- uva208 - Firetruck
- UVA208 Firetruck
- uva208 Firetruck
- [UVA 208] Firetruck (双向搜索)
- 双向搜索(UVA 208 Firetruck)
- (未)uva208 - Firetruck
- Uva208——Firetruck
- UVA208 Firetruck 回溯
- UVa 208 - Firetruck(剪枝)
- UVA 208 Firetruck 消防车(回溯 + 剪枝)
- 【TLE剪枝】UVa208救火车
- 习题7-1 消防车(Firetruck, ACM/ICPC World Finals 1991, UVa208)
- Uva208 Firetruck【dfs】【习题7-1】
- spring mvc 文件、图片上传(极简)ajaxFileUpload
- Unity-Animator-学习点滴
- ADT启动失败情况列举
- Win10更新,自定义nginx 80端口被系统占用
- Android之Activity切换和数据传递
- uva208 -Firetruck (双向搜索进行剪枝)
- ExtJS4中initComponent和constructor的区别
- linux下用公钥,私钥创建Android bks证书
- JS 常见日期时间操作——日期时间的格式化
- Sublime Text 3 支持的热门插件
- MFC之ADO数据库快速编程
- Linux 启动流程即init程序分析--2
- 怎么实现iMindMap Android中导图背景的设置
- C++注册表查看软件安装路径