知识点:图的遍历,回溯

这个题其实就是图的遍历然后加上回溯,但是有点坑的是,我们在找路径之前,要先判断1是不是能到k点,否则会超时,这个要不是看提示,还真想不到,因为如果不用别的函数来判断是不是连通的话,用求解的dfs函数,是自带回溯的,如果找不到,那么会比较费时间,会把所有的路径都走一遍,总之做这种图论的题总是会有很多这种考虑不周到,最后导致错误的地方,

这里存图没用邻接矩阵,用的是董晓讲的链式邻接表,因为我们每个节点要从小到大遍历它连着的节点,所有搜索之前对每个点连着的点排序,如果是采用链式前向星的话,我想不到该怎么写程序,就没有使用那种存图方式,

还有一点需要注意的是,题目输出,一个空格就够了,不需要样例里面长度为3的空格

#include <bits/stdc++.h>using namespace std;const int N = 25;int n, k, vis[N], cnt;
vector<int> h[N], chosen;
vector<pair<int, int>> e;void add(int a, int b) {e.push_back(make_pair(a, b));h[a].push_back((int) e.size() - 1);
}bool cmp(int a, int b) {return e[a].second < e[b].second;
}bool bfs() {queue<int> q;q.push(1);int dist[N] = {};dist[1] = 1;while (!q.empty()) {int now = q.front(); q.pop();if (now == k) return true;for (int i = 0; i < (int) h[now].size(); i++) {int ind = h[now][i];int y = e[ind].second;if (dist[y]) continue;q.push(y);dist[y] = 1;}}return false;
}void dfs(int x) {if (x == k) {for (int i = 0; i < (int) chosen.size(); i++) {cout << chosen[i] << (i < (int) chosen.size() - 1 ? " " : "\n");}cnt++;return;}for (int i = 0; i < (int) h[x].size(); i++) {int ind = h[x][i];int y = e[ind].second;if (vis[y]) continue;vis[y] = 1;chosen.push_back(y);dfs(y);chosen.pop_back();vis[y] = 0;}
}int main() {int tt = 1;while (cin >> k) {n = 0; cnt = 0;e.clear();for (int i = 0; i < N; i++) h[i].clear();cout << "CASE " << tt++ << ":\n";int a, b;while (cin >> a >> b && a) {add(a, b);add(b, a);n = max(n, max(a, b));}for (int i = 1; i <= n; i++) {sort(h[i].begin(), h[i].end(), cmp);}if (bfs()) {vis[1] = 1;chosen.push_back(1);dfs(1);vis[1] = 0;chosen.pop_back();}printf("There are %d routes from the firestation to streetcorner %d.\n", cnt, k);}return 0;
}

UVA208 消防车 Firetruck相关推荐

  1. 消防车Firetruck

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

  2. AOAPC I: Beginning Algorithm Contests 题解

    AOAPC I: Beginning Algorithm Contests 题解 AOAPC I: Beginning Algorithm Contests (Rujia Liu) - Virtual ...

  3. 习题7-1 消防车(Firetruck,ACM/ICPC World Finals 1991, UVa208)

    原题链接:https://vjudge.net/problem/UVA-208 备注:回溯法 分类:DFS 代码如下: #include<cstdio> #include<cstri ...

  4. 7-1 FireTruck 消防车 uva208

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

  5. 2022-2028年中国消防车行业市场前瞻与投资战略规划分析报告

    [报告类型]产业研究 [报告价格]¥4500 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国消防车行业市场行业相关概述.中国中国消防 ...

  6. 通道设置_烟台240家住宅小区、346家重点单位完成消防车通道标识设置

    "有了这样显眼的标识后,消防通道更加清晰可见,提醒大家时刻注意保持消防通道畅通.这样一来,发生火灾消防车能及时通过,我们出行.生活也增添了一份安全保障."消防监督人员在指导小区物业 ...

  7. ps绿化工具_绿化消防车价位

    绿化消防车价位绿化消防车价位 4吨东风消防洒水车,又称为多功能消防车,它是在东风原装二类底盘基础上加消防泵.消防炮.洒水炮及洒水车的前冲后洒.侧喷及水罐体组成,既能参加救火灭火功能,水炮的有效射程≥4 ...

  8. UVA - 208 Firetruck

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

  9. 三轴合并_用两套乐高60107合并成铰接式云梯消防车,看看和60112有什么区别

    我们之前通过将乐高城市组 60107 那套云梯消防车改装成一个特技赛车冲过终点线的场景,来演示了积木的套内 MOC. 今天我们就来看看两套 60107 又能做什么. 60107 (2006) 2016 ...

最新文章

  1. 语义分割--FCN 算法中的一些细节--特征怎么融合
  2. 深入理解风格迁移三部曲(三)--FUNIT
  3. C及C++中typedef的简单使用指南
  4. Ubuntu18.04安装Multiwfn
  5. java 根据类名示例化类_Java类类的requiredAssertionStatus()方法和示例
  6. 泰森中国宣布与阿里云达成战略合作
  7. JVM内存管理:深入垃圾收集器与内存分配策略
  8. lateral函数oracle,ORACLE LATERAL-SQL-INJECTION 个人见解
  9. ROS学习笔记九:用C++编写ROS发布与订阅
  10. ZABBIX 3.2.7 (源码包)安装部署
  11. 电脑进不了系统怎么重装系统win11
  12. 小程序web开发框架-weweb介绍 1
  13. cocostudio学习(UIScrollView控件内部子控件的可视化问题)
  14. springboot自定义start解析(start中配置从数据源)
  15. EPP (Enhanced Parallel Port 增强型并口)
  16. 朱松纯:浅谈人工智能:现状、任务、构架与统一 感悟以及部分内容的概括
  17. 亚马逊SP-API对接实践
  18. jenkins集成jmeter
  19. 名人名言 托尔斯泰 富兰克林 马克思 罗兰 培根
  20. lnnoDB:Attempted to open a previously opened tablespace. Previous tablespace mysql/innodb_index_stat

热门文章

  1. linux基本面试题
  2. 如何利用计算机做备课,如何用电脑进行电子教案的制作
  3. js 非构造函数的继承 object()方法
  4. [书目20160623]编程匠艺——编写卓越的代码
  5. 判断横屏竖屏方式(三种)
  6. matlab实现子载波分配,一种lte上行链路分步式动态子载波分配方法
  7. 泰达机器人董事长_3C家电与机器人如何“携手共进”? 听听大咖们怎么说
  8. 小学一年级古诗《春晓》知识点大全心田花开汇总
  9. 干货|app自动化测试之模拟器控制
  10. oracle设置快捷键,打印sf输出select * from