一道简单的路径打印,首先需要一次dfs判断能否从1到达目标点,否则可能会超时。还有一点就是那个格式需要注意下,每条路径前没有空格(看起来好像有3个空格)….

AC代码:

  1. #include<cstdio>
  2. #include<vector>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int maxn=21+5;
  7. int vis[maxn];
  8. vector<int>G[maxn];
  9. int cnt=0,goal;
  10. void reach(int u){ //能否到达目标节点
  11. vis[u]=1;
  12. int len=G[u].size();
  13. for(int i=0;i<len;++i){
  14. if(G[u][i]==goal) {vis[goal]=1;return;}
  15. if(!vis[G[u][i]]) reach(G[u][i]);
  16. }
  17. }
  18. void dfs(int *a,int cur,int u){
  19. if(u==goal){
  20. cnt++;
  21. //printf(" ");
  22. for(int i=0;i<cur;++i){
  23. if(i==0) printf("%d",a[i]);
  24. else printf(" %d",a[i]);
  25. }
  26. printf("\n");
  27. return;
  28. }
  29. int len=G[u].size();
  30. for(int i=0;i<len;++i){
  31. if(!vis[G[u][i]]){
  32. vis[G[u][i]]=1;
  33. a[cur]=G[u][i];
  34. dfs(a,cur+1,G[u][i]);
  35. vis[G[u][i]]=0;
  36. }
  37. }
  38. }
  39. void solve(){
  40. memset(vis,0,sizeof(vis));
  41. reach(1);
  42. if(!vis[goal]) return; //从1无法到达目标节点
  43. memset(vis,0,sizeof(vis));
  44. for(int i=1;i<maxn;++i){
  45. sort(G[i].begin(),G[i].end()); //排序的目的是方便按字典序输出
  46. }
  47. int a[maxn];
  48. a[0]=1; //1作为起点
  49. vis[1]=1;
  50. dfs(a,1,1);
  51. }
  52. int main(){
  53. int kase=0;
  54. while(scanf("%d",&goal)==1){
  55. cnt=0;
  56. int x,y;
  57. while(scanf("%d%d",&x,&y)==2&&x){
  58. G[x].push_back(y);
  59. G[y].push_back(x);
  60. }
  61. printf("CASE %d:\n",++kase);
  62. solve();
  63. printf("There are %d routes from the firestation to streetcorner %d.\n",cnt,goal);
  64. for(int i=0;i<maxn;++i) G[i].clear();
  65. }
  66. return 0;
  67. }

如有不当之处欢迎指出!

uva208的更多相关文章

  1. UVa-208 Firetruck (图的DFS)

    UVA-208 天道好轮回.UVA饶过谁. 就是一个图的DFS. 不过这个图的边太多,要事先判一下起点和终点是否联通(我喜欢用并查集),否则会TLE. #include <iostream> ...

  2. uva208 - Firetruck

    Firetruck The Center City fire department collaborates with the transportation department to maintai ...

  3. UVA-208 Firetruck (回溯)

    题目大意:给一张无向图,节点编号从1到n(n<=20),按字典序输出所有从1到n的路径. 题目分析:先判断从1是否能到n,然后再回溯. 注意:这道题有坑,按样例输出会PE. 代码如下: # in ...

  4. 7-1 FireTruck 消防车 uva208

    题意: 输入一个n <=20 个结点的无向图以及某个结点k   按照字典序从小到大顺序输出从结点1到结点k的所有路径  要求结点不能重复经过 标准回溯法 要实现从小到大字典序 现在数组中排序好即 ...

  5. UVA208 Firetruck 消防车(并查集,dfs)

    要输出所有路径,又要字典序,dfs最适合了,用并查集判断1和目的地是否连通即可 #include<bits/stdc++.h> using namespace std; ; int p[m ...

  6. 【习题 7-1 UVA-208】Firetruck

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 预处理一下终点能到达哪些点. 暴力就好. 输出结果的时候,数字之间一个空格.. [代码] /* 1.Shoud it use lon ...

随机推荐

  1. junit源码解析--测试驱动运行阶段

    前面的博客里面我们已经整理了junit的初始化阶段,接下来就是junit的测试驱动运行阶段,也就是运行所有的testXXX方法.OK,现在我们开始吧. 前面初始化junit之后,开始执行doRun方法 ...

  2. 尝试Spring Data Jpa--告别CRUD

    前言 说到我们的web开发架构分层中,持久层是相对底层也是相对稳定的一层,奠定好根基后,我们才能专注于业务逻辑和视图开发.而自从ORM思想蔓延开来后,全自动ORM的Hibernate和半自动ORM的M ...

  3. smokeping一键安装脚本

    #!/bin/bash #Date 2017/11/11 #mail caoyf1992@163.com [ $(id -u) != "0" ] && echo & ...

  4. 浅谈OSI七层模型及ICP/IP四层模型

    1.OSI七层模型的概念 在网络历史的早期,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型. 一台计算机操作系统中的网络过程包括从应用请求(在协议栈 ...

  5. ldconfig几个需要注意的地方

    1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到 2. 想往上面两个目录以外加东西的时候, ...

  6. iOS-打电话、发短信、发邮件【指定QQ用户发送QQ消息】

    1.发短信 头文件 #import <MessageUI/MessageUI.h> 头部代理 @interface ViewController ()<MFMessageCompos ...

  7. 关于metaclass,我原以为我是懂的

    关于Python2.x中metaclass这一黑科技,我原以为我是懂的,只有当被打脸的时候,我才认识到自己too young too simple sometimes native. 为什么之前我认为 ...

  8. 自己动手实践 spring retry 重试框架

    前序 马上过年了,预祝大家,新年快乐,少写bug 什么是spring retry? spring retry是从spring batch独立出来的一个能功能,主要实现了重试和熔断. 什么时候用? 远程 ...

  9. python+opencv2相机位姿估计

    最近在做基于图像的室内定位方面的研究,于是使用到了百度最新的室内数据库Image-based Localization (IBL) .由于该数据库给出的数据是每幅图像和其对应相机的内外参数和光心投影方 ...

  10. sql sever基本语法总结

    一.数据库导入表 1.先用sql语句创建相应的表,包括表的字段和字段类型 2.导入数据,选择相应的表名,不带'$'符号的表名 二.创建数据库 create datatable 数据库名 三.查看表里的 ...