UVa 208 - Firetruck (回溯)
题意
给出一个无向图和终点的编号
按字典序枚举出从1到终点的路径
思路
要事先判断结点1是否可以到达结点k, 用一个bool judge()函数判断一下从终点能否回到1点即可. 如果无解直接输出有0种走法
有解则用dfs即可. 因为每种走法里一个编号只能走一次, 用一个数组m[]标记是否走过. 记得每次标记之后进入dfs(), 出来之后要清除该标记, 以防影响程序后面的判断
DFS在回溯时要取消原先的标记
而BFS不存在回溯也就不存在取消标记这一问题。
话说这道题的格式, 是没有前导空格的
VJ给的PDF显示有点问题 =_=
AC代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>using namespace std;#define mst(a) memset(a,0,sizeof(a));
const int maxn = 30;
int G[maxn][maxn], vis[maxn][maxn], m[maxn], r[maxn];
int aim, mmax, all;bool judge(int n)
{if( n == 1 ) return true;m[n] = 1;for( int i = mmax; i >= 1; i-- ){if( m[i] ) continue;if( G[n][i] )if( judge(i) )return true;}return false;
}void print( int len )
{all++;printf("1");for( int i = 0; i < len; i++ )printf(" %d",r[i]);puts("");
}void dfs( int n, int k )
{if( n == aim )print(k);for( int i = 2; i <= mmax; i++ ){if( !m[i] && G[n][i] ){m[i] = 1;r[k] = i;dfs(i, k+1);m[i] = 0;}}
}void solve()
{mst(m);dfs(1, 0);
}int main()
{int a, b, kase = 0;while( ~scanf("%d",&aim) ){mmax = aim, all = 0;mst(G);mst(vis);mst(m);mst(r);while( scanf("%d%d",&a,&b) == 2 && a ){G[a][b] = 1;G[b][a] = 1; //双向可走mmax = max(mmax,a);mmax = max(mmax,b);}printf("CASE %d:\n",++kase);if(!judge(aim)){printf("There are 0 routes from the firestation to streetcorner %d.\n",aim);continue;}solve();printf("There are %d routes from the firestation to streetcorner %d.\n",all, aim);}return 0;
}
转载于:https://www.cnblogs.com/JinxiSui/p/9740591.html
UVa 208 - Firetruck (回溯)相关推荐
- UVA - 208 Firetruck
UVA - 208 Firetruck 题目大意 构造出一张图,给出一个点,让你按字典序输出所有从1到该点的路径 一开始直接DFS超时了 后面看到大佬的优化,大意就是很多起点与终点不相连,需要一开始剪 ...
- UVa 208 Firetruck【回溯】
题意:给出一个n个节点的无向图,以及某个节点k,按照字典序从小到大输出从节点1到节点k的所有路径 看的题解 http://blog.csdn.net/hcbbt/article/details/975 ...
- UVA - 208 Firetruck(并查集+dfs)
题目: 给出一个结点d和一个无向图中所有的边,按字典序输出这个无向图中所有从1到d的路径. 思路: 1.看到紫书上的提示,如果不预先判断结点1是否能直接到达结点d,上来就直接dfs搜索的话会超时,于是 ...
- Firetruck UVA - 208
DFS+并查集 如果只用DFS的话会超时,用并查集剪枝,和起点终点不联通的点就不用跑了 这题有好多人写了博客,但是我觉得我的代码写的比较通俗易懂所以就贴上来了,我觉得我写代码的目标就是让任何人都能看懂 ...
- UVA 208 划水记录2
题目:题目描述 中心城市消防部门与运输部门合作,维护反映城市街道现状的城市地图.消防员需要能够选择从火警站到火警的路线. 中心城市分为不重叠的消防区.当报告发生火灾时,中央调度员通知火灾发生地区最近的 ...
- UVA 208 救火车
直接DFS会导致超时TLE http://www.cnblogs.com/staginner/archive/2011/09/07/2170348.html 中写到,如果首先求出与着火点相连的顶点再D ...
- python怎么复制字符串_python字符串复制的几种方法
>>> list1 = [1,2] >>> id(list1) 50081032 >>> list2 = list1.copy() >> ...
- linux睿频是自动的吗,Linux限制cpu睿频限制频率
as3.0 [Embed]标签嵌入外部资源 1.[Embed]嵌入资源 ActionScript代码的顺序非常重要.你必须在声明变量前添加[Embed]元数据标签,而且这个变量的类型会是Class; ...
- π-Algorithmist分类题目(2)
原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(2) Set Theory U ...
最新文章
- 常用的数据结构-队列
- CSS设置样式时,鼠标移动到div上,发生抖动问题解决办法
- Spring Cloud【Finchley】-17 使用Zuul为单个或全部微服务提供容错与回退功能
- [转]iOS为UILabel添加长按复制功能
- numpy.random.rand使用详解
- Product settype list tool - report PROD_DISPLAY_SETTYPE
- mysql查找表shoe table,mysql命令行常用命令
- Liferay开发学习Part6:Service Builder
- PHP案例:实现数据库增删改查功能
- 来!喝杯可乐!让你秒懂 MVP 架构模式 | 原力计划
- Linux之date命
- Linux-安装python3环境
- re2正则表达式引擎学习(四)
- 如何在工作中形成自己的方法论(待完善)
- 掌握一项陌生技能,没你想得那么难
- JavaWeb - 小米商城:登录与退出
- PAT 甲级 1018. Public Bike Management
- 《计算机应用基础》 东师,A东师《计算机应用基础》15春在线作业 .doc
- 简单两步,将Windows11右键菜单修改为Windows10风格
- Unity3d 技巧(4)-如何配置JavaHome
热门文章
- 架构设计:分布式服务,库表拆分模式详解
- 浙江大学计算机基础上机实验答案,2015年浙江大学远程教育计算机基础知识题及参考答案(2)...
- 青果灵动刘睿:3D页游将有更多机会
- ImportError: cannot import name ‘options‘ from ‘pyecharts‘
- PHP面试题:PHP.ini路径?
- Slave: received end packet from server, apparent master shutdown:
- oracle数据库空间估算
- 三大linux系统对比
- Android app:transformNativeLibsWithStripDebugSymbolForDebug错误分析
- 虚幻4 ue4 学习笔记pwan篇 1.4 pawn结合UPawnMovementComponent类 移动组件实现 移动球体添加物理碰撞...