UVa 208 Firetruck【回溯】
题意:给出一个n个节点的无向图,以及某个节点k,按照字典序从小到大输出从节点1到节点k的所有路径
看的题解
http://blog.csdn.net/hcbbt/article/details/9755147
因为节点数很少(小于20),所以可以先用floyd处理一下,判断一点是否能够到达终点
然后就像紫书里面枚举排列那样的去挨个找出字典序从小到大的路径
题解里面说到的无回溯的走遍和终点相连的所有点,他写的代码是判断的d[en][i],判断终点到i点是否可达
写成d[i][en]也能过,因为是无向图
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<set> 9 #include<queue> 10 #include<algorithm> 11 using namespace std; 12 13 #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i) 14 15 typedef long long LL; 16 const int INF = (1<<30)-1; 17 const int mod=1000000007; 18 const int maxn=55; 19 20 int d[maxn][maxn],rute[maxn],vis[maxn]; 21 int en,n,ans; 22 23 void dfs(int x,int cnt){ 24 if(x==en){ 25 printf("1"); 26 for(int i=1;i<cnt-1;i++) printf(" %d",rute[i]); 27 printf(" %d\n",en); 28 ans++; 29 return; 30 } 31 32 for(int i=2;i<=n;i++){ 33 if(!vis[i]&&d[x][i]==1&&d[i][en]!=INF){ 34 rute[cnt]=i; 35 vis[i]=1; 36 dfs(i,cnt+1); 37 vis[i]=0; 38 } 39 } 40 } 41 42 43 int main(){ 44 int kase=0; 45 while(scanf("%d",&en)!=EOF){ 46 int u,v; 47 n=-1; 48 for(int i=1;i<=55;i++){ 49 for(int j=1;j<=55;j++) { 50 d[i][j]=INF; 51 } 52 } 53 54 while(scanf("%d %d",&u,&v)&&(u||v)){ 55 d[u][v]=d[v][u]=1; 56 n=max(max(u,v),n);//找出这张图里面最大的点的标号 57 } 58 59 for(int k=1;k<=n;k++) 60 for(int i=1;i<=n;i++) 61 for(int j=1;j<=n;j++) 62 d[i][j]=min(d[i][j],d[i][k]+d[k][j]); 63 64 ans=0; 65 memset(vis,0,sizeof(vis)); 66 67 printf("CASE %d:\n", ++kase); 68 dfs(1,1); 69 printf("There are %d routes from the firestation to streetcorner %d.\n", ans, en); 70 } 71 return 0; 72 }
View Code
不知道是不是真的理解了的说啊-----
加油啊---g00000000000
转载于:https://www.cnblogs.com/wuyuewoniu/p/4480098.html
UVa 208 Firetruck【回溯】相关推荐
- UVa 208 - Firetruck (回溯)
题意 给出一个无向图和终点的编号 按字典序枚举出从1到终点的路径 思路 要事先判断结点1是否可以到达结点k, 用一个bool judge()函数判断一下从终点能否回到1点即可. 如果无解直接输出有0种 ...
- UVA - 208 Firetruck
UVA - 208 Firetruck 题目大意 构造出一张图,给出一个点,让你按字典序输出所有从1到该点的路径 一开始直接DFS超时了 后面看到大佬的优化,大意就是很多起点与终点不相连,需要一开始剪 ...
- UVA - 208 Firetruck(并查集+dfs)
题目: 给出一个结点d和一个无向图中所有的边,按字典序输出这个无向图中所有从1到d的路径. 思路: 1.看到紫书上的提示,如果不预先判断结点1是否能直接到达结点d,上来就直接dfs搜索的话会超时,于是 ...
- Firetruck UVA - 208
DFS+并查集 如果只用DFS的话会超时,用并查集剪枝,和起点终点不联通的点就不用跑了 这题有好多人写了博客,但是我觉得我的代码写的比较通俗易懂所以就贴上来了,我觉得我写代码的目标就是让任何人都能看懂 ...
- UVA 208 划水记录2
题目:题目描述 中心城市消防部门与运输部门合作,维护反映城市街道现状的城市地图.消防员需要能够选择从火警站到火警的路线. 中心城市分为不重叠的消防区.当报告发生火灾时,中央调度员通知火灾发生地区最近的 ...
- UVA 208 救火车
直接DFS会导致超时TLE http://www.cnblogs.com/staginner/archive/2011/09/07/2170348.html 中写到,如果首先求出与着火点相连的顶点再D ...
- python怎么复制字符串_python字符串复制的几种方法
>>> list1 = [1,2] >>> id(list1) 50081032 >>> list2 = list1.copy() >> ...
- linux睿频是自动的吗,Linux限制cpu睿频限制频率
as3.0 [Embed]标签嵌入外部资源 1.[Embed]嵌入资源 ActionScript代码的顺序非常重要.你必须在声明变量前添加[Embed]元数据标签,而且这个变量的类型会是Class; ...
- π-Algorithmist分类题目(2)
原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(2) Set Theory U ...
最新文章
- 使用Java程序消费SAP Leonardo的机器学习API
- WIN10系统触摸板快捷键
- python 柱状图给特定的柱子上的_python 柱状图生成后少一个柱子,请指教!
- ByteBuffer源码分析
- 针对“零时差”*** 赛门铁克推免费杀毒软件
- 应对不良网络文化的技术之一——网络信息抽取技术
- 《Python Cookbook 3rd》笔记(5.10):内存映射的二进制文件
- Android应用开发-图片加载库Glide
- 到达一个数 Reach a Number
- 进程句柄和进程ID的区别和关系
- nodefs模块的使用demo
- selenium webdirver之ruby-开发ide乱码解决方案
- 在写文档时如何在正文中对参考文献的引用
- optisystem中器件的学习(4-Test Sets/Passives Library/Optical Switches)
- python操作office word模板
- 2013年最新热门软件分享第一季
- 使用树形笔记,构建一个清晰高效、可以不断积累进步的知识系统
- 点餐系统的开发,java后台+微信小程序 实现完整的餐厅点餐系统。微信扫码点餐小程序源码讲解
- HBO Max for Mac(HBO Max客户端)
- Web—网页连接Mysql数据库(php)网站建设
热门文章
- 7个C语言小程序让你快速入门程序世界
- microsoftexchange邮箱容量怎样看_企业邮箱申请注册的要求有哪些?_网站建设_创客网络...
- go语音protobuf_golang 使用 protobuf 的教程
- python3进阶_Python3 进阶教程 2020全新版
- html如何在画布上加层,在Canvas中嵌套Html
- everything安装版和便携版有什么区别_A2奶粉内幕:国行版和澳洲版有什么区别 贵的不一定好!...
- [渝粤教育] 温州医科大学 医用高等数学 参考 资料
- 【渝粤教育】电大中专药剂学基础知识_1作业 题库
- 【渝粤题库】陕西师范大学180113 学前儿童艺术教育作业
- 【渝粤题库】国家开放大学2021春1443卫生信息与文献检索题目