一道简单的路径打印,首先需要一次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. python_8_字典

    什么是字典? --key -value 的数据类型,找到key就可以找到对应的值 --字典形式:{key1:value1,key2:value2,......} #!/usr/bin/python3 ...

  2. ECLIPS-S测井系统下的仪器挂接 [TCC模块]

    1. 环境 HPUX版本:11.23 Complete Image ECLIPS版本:Rel 5.1i 2. 效果图 3. 用途 为以后在此系统中挂接新仪器打下坚实的基础. 4. 参考资料 ECLIP ...

  3. selenium-java web自动化测试工具

    本篇文章由来,这两天整理了下自己经常使用而且很熟练的项目,今天突然想起漏了一个,补上了,但想到还没对应的博客,那就写一个简单的 我经常使用且相对熟练的部分技术如下(不知道算不算各位大神眼中的辣鸡): ...

  4. su鉴定故障

    su切换用户鉴定故障 [yolo1@izqfsfqp8ejn9zz ~]$ su root密码:su: 鉴定故障[yolo1@izqfsfqp8ejn9zz ~]$ sudo root 我们信任您已经 ...

  5. 13 Basic Cat Command Examples in Linux(转) Linux中cat命令的13中基本用法

    Cat (串联) 命令是Linux/Unix开源系统中比较常用的一个命令.我们可以通过Cat命令创建一个或多个文件,查看文件内容,串联文件并将内容输出到终端设备或新的文件当中,这篇文章我们将会以实例的 ...

  6. C语言的格式符

    转至:http://blog.csdn.net/zhanzheng520/article/details/10434791   一.格式符含义 1.d格式符:按十进制格式输出. %d          ...

  7. 微信浏览器返回刷新,监听微信浏览器返回事件,网页防复制,移动端禁止图片长按和vivo手机点击img标签放大图片

    以下代码都经过iphone7,华为MT7 ,谷歌浏览器,微信开发者工具,PC端微信验证.如有bug,还请在评论区留言. demo链接:https://pan.baidu.com/s/1c35mbjM ...

  8. ArcSDE 10.1安装、配置、连接

    ArcSDE 10.1安装.配置.连接 (SQL Server 2008) 1  概述 ArcSDE 10.1的安装配置相较于ArcSDE 10.0和之前版本,有了一些显著的变化,比如取消了Post ...

  9. ant基础[转]

    原文链接:http://www.cnblogs.com/wufengxyz/archive/2011/11/24/2261797.html 1,什么是antant是构建工具2,什么是构建概念到处可查到 ...

  10. bzoj 3864: Hero meet devil [dp套dp]

    3864: Hero meet devil 题意: 给你一个只由AGCT组成的字符串S (|S| ≤ 15),对于每个0 ≤ .. ≤ |S|,问 有多少个只由AGCT组成的长度为m(1 ≤ m ≤ ...