题意

给出一个无向图和终点的编号
按字典序枚举出从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 (回溯)相关推荐

  1. UVA - 208 Firetruck

    UVA - 208 Firetruck 题目大意 构造出一张图,给出一个点,让你按字典序输出所有从1到该点的路径 一开始直接DFS超时了 后面看到大佬的优化,大意就是很多起点与终点不相连,需要一开始剪 ...

  2. UVa 208 Firetruck【回溯】

    题意:给出一个n个节点的无向图,以及某个节点k,按照字典序从小到大输出从节点1到节点k的所有路径 看的题解 http://blog.csdn.net/hcbbt/article/details/975 ...

  3. UVA - 208 Firetruck(并查集+dfs)

    题目: 给出一个结点d和一个无向图中所有的边,按字典序输出这个无向图中所有从1到d的路径. 思路: 1.看到紫书上的提示,如果不预先判断结点1是否能直接到达结点d,上来就直接dfs搜索的话会超时,于是 ...

  4. Firetruck UVA - 208

    DFS+并查集 如果只用DFS的话会超时,用并查集剪枝,和起点终点不联通的点就不用跑了 这题有好多人写了博客,但是我觉得我的代码写的比较通俗易懂所以就贴上来了,我觉得我写代码的目标就是让任何人都能看懂 ...

  5. UVA 208 划水记录2

    题目:题目描述 中心城市消防部门与运输部门合作,维护反映城市街道现状的城市地图.消防员需要能够选择从火警站到火警的路线. 中心城市分为不重叠的消防区.当报告发生火灾时,中央调度员通知火灾发生地区最近的 ...

  6. UVA 208 救火车

    直接DFS会导致超时TLE http://www.cnblogs.com/staginner/archive/2011/09/07/2170348.html 中写到,如果首先求出与着火点相连的顶点再D ...

  7. python怎么复制字符串_python字符串复制的几种方法

    >>> list1 = [1,2] >>> id(list1) 50081032 >>> list2 = list1.copy() >> ...

  8. linux睿频是自动的吗,Linux限制cpu睿频限制频率

    as3.0 [Embed]标签嵌入外部资源 1.[Embed]嵌入资源 ActionScript代码的顺序非常重要.你必须在声明变量前添加[Embed]元数据标签,而且这个变量的类型会是Class; ...

  9. π-Algorithmist分类题目(2)

    原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(2) Set Theory U ...

最新文章

  1. 常用的数据结构-队列
  2. CSS设置样式时,鼠标移动到div上,发生抖动问题解决办法
  3. Spring Cloud【Finchley】-17 使用Zuul为单个或全部微服务提供容错与回退功能
  4. [转]iOS为UILabel添加长按复制功能
  5. numpy.random.rand使用详解
  6. Product settype list tool - report PROD_DISPLAY_SETTYPE
  7. mysql查找表shoe table,mysql命令行常用命令
  8. Liferay开发学习Part6:Service Builder
  9. PHP案例:实现数据库增删改查功能
  10. 来!喝杯可乐!让你秒懂 MVP 架构模式 | 原力计划
  11. Linux之date命
  12. Linux-安装python3环境
  13. re2正则表达式引擎学习(四)
  14. 如何在工作中形成自己的方法论(待完善)
  15. 掌握一项陌生技能,没你想得那么难
  16. JavaWeb - 小米商城:登录与退出
  17. PAT 甲级 1018. Public Bike Management
  18. 《计算机应用基础》 东师,A东师《计算机应用基础》15春在线作业 .doc
  19. 简单两步,将Windows11右键菜单修改为Windows10风格
  20. Unity3d 技巧(4)-如何配置JavaHome

热门文章

  1. 架构设计:分布式服务,库表拆分模式详解
  2. 浙江大学计算机基础上机实验答案,2015年浙江大学远程教育计算机基础知识题及参考答案(2)...
  3. 青果灵动刘睿:3D页游将有更多机会
  4. ImportError: cannot import name ‘options‘ from ‘pyecharts‘
  5. PHP面试题:PHP.ini路径?
  6. Slave: received end packet from server, apparent master shutdown:
  7. oracle数据库空间估算
  8. 三大linux系统对比
  9. Android app:transformNativeLibsWithStripDebugSymbolForDebug错误分析
  10. 虚幻4 ue4 学习笔记pwan篇 1.4 pawn结合UPawnMovementComponent类 移动组件实现 移动球体添加物理碰撞...