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

AC代码:

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn=21+5;
int vis[maxn];
vector<int>G[maxn];
int cnt=0,goal;

void reach(int u){  //能否到达目标节点
    vis[u]=1;
    int len=G[u].size();
    for(int i=0;i<len;++i){
        if(G[u][i]==goal) {vis[goal]=1;return;}
        if(!vis[G[u][i]]) reach(G[u][i]);
    }
}

void dfs(int *a,int cur,int u){
    if(u==goal){
        cnt++;
        //printf("   ");
        for(int i=0;i<cur;++i){
            if(i==0) printf("%d",a[i]);
            else printf(" %d",a[i]);
        }
        printf("\n");
        return;
    }
    int len=G[u].size();
    for(int i=0;i<len;++i){
        if(!vis[G[u][i]]){
            vis[G[u][i]]=1;
            a[cur]=G[u][i];
            dfs(a,cur+1,G[u][i]);
            vis[G[u][i]]=0;
        }
    }
}

void solve(){
    memset(vis,0,sizeof(vis));
    reach(1);
    if(!vis[goal]) return; //从1无法到达目标节点
    memset(vis,0,sizeof(vis));
    for(int i=1;i<maxn;++i){
        sort(G[i].begin(),G[i].end()); //排序的目的是方便按字典序输出
    }
    int a[maxn];
    a[0]=1; //1作为起点
    vis[1]=1;
    dfs(a,1,1);
}

int main(){
    int kase=0;
    while(scanf("%d",&goal)==1){
        cnt=0;
        int x,y;
        while(scanf("%d%d",&x,&y)==2&&x){
            G[x].push_back(y);
            G[y].push_back(x);
        }
        printf("CASE %d:\n",++kase);
        solve();
        printf("There are %d routes from the firestation to streetcorner %d.\n",cnt,goal);
        for(int i=0;i<maxn;++i) G[i].clear();
    }
    return 0;
}

如有不当之处欢迎指出!

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. JavaScript高级编程小结

    Undefined 对未初始化的变量执行typeof操作符会返回undefined值,而对未声明的变量执行typeof操作符同样也会返回undefined var message; console.l ...

  2. lambda高级进阶--表达式参数

    1,现在我们封装一个方法,来提供一个比较器,显然比较器是拥有两个参数的--用来比较的两个值. public class Linkin { public static String[] sort(Str ...

  3. AQS 框架之 LockSupport 线程阻塞工具类

    ■ 前言 并发包一直是 JDK 里面比较难理解的,同时也是很精美的语言,膜拜下 Doug Li 大神.作者不敢长篇大论,只求循序渐进地把并发包通过理论和实战 (代码) 的方式介绍给大家. 其实做每一件 ...

  4. python --- mulitprocessing(多进程)模块使用

    1. 什么是进程? 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执 ...

  5. 解决C#编译中"csc不是内部或外部命令"的问题

    安装完 VisualStudio 编译环境后,是不能用命令行直接编译写好的csc文件的,如果不配置环境变量,在命令提示符(cmd)中编译扩展名为cs的文件,会出现错误提示"csc不是内部或外 ...

  6. js发展历史

    1992年Nombas开发和醋C-minus-minus(c--),的嵌入式脚本语言,最初是绑定在Cenvi软件中,后将其改名scriptEase(客户端执行的语言) Netscape 接受Nomba ...

  7. (三)surging 微服务框架使用系列之我的第一个服务(审计日志)

    前言:前面准备了那么久的准备工作,现在终于可以开始构建我们自己的服务了.这篇博客就让我们一起构建自己的第一个服务---审计日志. 首先我们先创建两个项目,一个控制台的服务启动项目,一个业务的实现项目. ...

  8. 2017年总结的前端文章——CSS盒模型详解

    CSS的盒模型是CSS的基础,同时也是难点,这个问题经常在面试中会被问到,属于经典问题了.很多博客里讲得也很模糊不清,于是,我在这里重新整理一下. 可以认为每个html标签都是一个方块,然后这个方块又 ...

  9. Spring MVC + Spring + Mybitis开发Java Web程序基础

    Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...

  10. BZOJ 3239: Discrete Logging [BGSG]

    裸题 求\(ind_{n,a}b\),也就是\(a^x \equiv b \pmod n\) 注意这里开根不能直接下取整 这个题少了一些特判也可以过... #include <iostream& ...