UVA-208

天道好轮回。UVA饶过谁。

就是一个图的DFS。

不过这个图的边太多,要事先判一下起点和终点是否联通(我喜欢用并查集),否则会TLE。

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#define maxn 40
using namespace std; int a[maxn][maxn], vis[maxn], ans, f[maxn];
vector<int> q; int build(int x, int y)
{
a[x][y] = ;
a[y][x] = ;
} int found(int x)
{
if (f[x] == x) return x;
f[x] = found(f[x]);
return f[x]; } int add(int x, int y)
{
int fx = found(x), fy = found(y);
if (fx != fy) f[fx] = fy;
} void DFS(int k, int n)
{
if (k == n)
{
for (int i = ; i < q.size()-; i++)
cout << q[i] << " ";
cout << q[q.size()-] << endl;
ans++;
} for (int i = ; i <= maxn / ; i++)
if (!vis[i] && a[k][i])
{
vis[i] = ;
q.push_back(i);
DFS(i, n);
q.pop_back();
vis[i] = ;
}
} int main()
{
int n, cases = ;
while (cin >> n)
{
memset(a, , sizeof(a));
memset(vis, , sizeof(vis));
for (int i = ; i <= maxn/; i++) f[i] = i;
ans = ;
while (!q.empty()) q.pop_back();
int x, y;
while (cin >> x >> y && x && y)
{
build(x, y);
add(x, y);
}
++cases;
printf("CASE %d:\n", cases);
q.push_back();
vis[] = ;
if (found() == found(n)) DFS(, n);
printf("There are %d routes from the firestation to streetcorner %d.\n", ans, n);
} }
#

UVa-208 Firetruck (图的DFS)的更多相关文章

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

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

  2. UVa 208 - Firetruck 回溯+剪枝 数据

    题意:构造出一张图,给出一个点,字典序输出所有从1到该点的路径. 裸搜会超时的题目,其实题目的数据特地设计得让图稠密但起点和终点却不相连,所以直接搜索过去会超时. 只要判断下起点和终点能不能相连就行了 ...

  3. UVa 208 Firetruck【回溯】

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

  4. Uva 208 - Firetruck

    [题目链接]http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&p ...

  5. UVA - 208 Firetruck(消防车)(并查集+回溯)

    题意:输入着火点n,求结点1到结点n的所有路径,按字典序输出,要求结点不能重复经过. 分析:用并查集事先判断结点1是否可以到达结点k,否则会超时.dfs即可. #pragma comment(link ...

  6. UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)

    UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...

  7. [数据结构]图的DFS和BFS的两种实现方式

    深度优先搜索 深度优先搜索,我们以无向图为例. 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似. 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发, ...

  8. UVA.297 Quadtrees (四分树 DFS)

    UVA.297 Quadtrees (四分树 DFS) 题意分析 将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块.字符表示规则是: p表示这个像素块继续分解 ...

  9. 图的DFS和BFS(邻接表)

    用C++实现图的DFS和BFS(邻接表) 概述   图的储存方式有邻接矩阵和邻接表储存两种.由于邻接表的实现需要用到抽象数据结构里的链表,故稍微麻烦一些.C++自带的STL可以方便的实现List,使算 ...

随机推荐

  1. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C

    Molly Hooper has n different kinds of chemicals arranged in a line. Each of the chemicals has an aff ...

  2. 最长上升子序列LIS(云笔记图片版)

  3. [已读]精通AngularJS

    觉得可以看第二遍,内容其实还不错啦,就是翻译会有点生硬.

  4. 删除所有约束、表、视图等SQL脚本

    --删除所有约束.表.视图等SQL脚本 --############################################### --删除所有外键约束 --################# ...

  5. System.TypeInitializationException: 'The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception.'

    下午在调试的时候报错数据库连接就报错我就很纳闷后面用原来的代码写发现还是报错 System.TypeInitializationException: 'The type initializer for ...

  6. linux下phpstudy的搭建以及网站的搭建

    step1: 下载SSH连接到IP地址(阿里云上购买的) step2: 安装下载phpstudywget -c http://lamp.phpstudy.net/phpstudy.bin chmod ...

  7. c语言中的->代表什么意思

    c语言中 ->符号是什么意思? 比如c=a->b a为结构体或联合体的指针,->表示调用其成员

  8. Jenkins默认工作空间及更改默认工作空间

    1.Jenkins安装到tomcat 需2步: ①官网下载Jenkins(一个war包) ②安装 所谓安装,也有两种形式: 一是在安装了jdk的情况下直接运行:java -jar jenkins.wa ...

  9. sysdig安装和使用介绍

    安装步骤1)安装资源库rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.publiccurl -s -o ...

  10. 最常见的 5 个导致节点重新启动、驱逐或 CRS 意外重启的问题 (文档 ID 1524455.1)

    适用于: Oracle Database - Enterprise Edition - 版本 10.1.0.2 到 11.2.0.3 [发行版 10.1 到 11.2]本文档所含信息适用于所有平台 用 ...