7-1 FireTruck 消防车 uva208
题意: 输入一个n <=20 个结点的无向图以及某个结点k 按照字典序从小到大顺序输出从结点1到结点k的所有路径 要求结点不能重复经过
标准回溯法
要实现从小到大字典序 现在数组中排序好即可
标记数组一定要删去!!!!切记 又因为这个弄错了
提高效率的方法:
先遍历一遍所有点 把和k点相关的点存入数组中 那些无关的点根本用不到
同时也解决了如果 1与k不相连所造成的大量时间浪费
#include<bits/stdc++.h>
using namespace std;
#define N 22
int k;
int path[N];
int mp[N][N];
int cnt=;
int vis[N];
vector<int>s;
void dfs1(int x)
{
vis[x]=;
s.push_back(x);
for(int i=;i<;i++)
if(mp[x][i]&&!vis[i])
dfs1(i);
} void dfs(int node,int cur)
{
if(node==k)
{
cnt++;
printf("");
for(int i=;i<cur;i++)
printf(" %d",path[i]);
printf("\n");
} for(int i=;i<s.size();i++)
{
if(mp[node][s[i]])
if(!vis[ s[i] ])
{
path[cur]=s[i];
vis[ s[i] ]=;
dfs( s[i] ,cur+);
vis[ s[i] ]=;
}
}
} int main()
{ int cas=;
while(scanf("%d",&k)==&&k)
{
int a,b;
memset(mp,,sizeof mp); while(scanf("%d %d",&a,&b)&&b&&a)
{
mp[a][b]=mp[b][a]=;
}
s.clear();
path[]=;
cnt=;
dfs1(k);
sort(s.begin(),s.end());
memset(vis,,sizeof vis);
printf("CASE %d:\n",++cas);
dfs(,);
printf("There are %d routes from the firestation to streetcorner %d.\n", cnt, k);
}
}
7-1 FireTruck 消防车 uva208的更多相关文章
- UVA208 Firetruck 消防车(并查集,dfs)
要输出所有路径,又要字典序,dfs最适合了,用并查集判断1和目的地是否连通即可 #include<bits/stdc++.h> using namespace std; ; int p[m ...
- uva208 - Firetruck
Firetruck The Center City fire department collaborates with the transportation department to maintai ...
- UVa-208 Firetruck (图的DFS)
UVA-208 天道好轮回.UVA饶过谁. 就是一个图的DFS. 不过这个图的边太多,要事先判一下起点和终点是否联通(我喜欢用并查集),否则会TLE. #include <iostream> ...
- UVA - 208 Firetruck(消防车)(并查集+回溯)
题意:输入着火点n,求结点1到结点n的所有路径,按字典序输出,要求结点不能重复经过. 分析:用并查集事先判断结点1是否可以到达结点k,否则会超时.dfs即可. #pragma comment(link ...
- UVA-208 Firetruck (回溯)
题目大意:给一张无向图,节点编号从1到n(n<=20),按字典序输出所有从1到n的路径. 题目分析:先判断从1是否能到n,然后再回溯. 注意:这道题有坑,按样例输出会PE. 代码如下: # in ...
- 【习题 7-1 UVA-208】Firetruck
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 预处理一下终点能到达哪些点. 暴力就好. 输出结果的时候,数字之间一个空格.. [代码] /* 1.Shoud it use lon ...
- Uva 208 - Firetruck
[题目链接]http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&p ...
- UVa 208 - Firetruck 回溯+剪枝 数据
题意:构造出一张图,给出一个点,字典序输出所有从1到该点的路径. 裸搜会超时的题目,其实题目的数据特地设计得让图稠密但起点和终点却不相连,所以直接搜索过去会超时. 只要判断下起点和终点能不能相连就行了 ...
- uva208
一道简单的路径打印,首先需要一次dfs判断能否从1到达目标点,否则可能会超时.还有一点就是那个格式需要注意下,每条路径前没有空格(看起来好像有3个空格)-. AC代码: #include<cst ...
随机推荐
- Redis slowlog慢查询
slowlog (阅读原文) 此命令用于读取和重置redis慢请求日志 redis slow log概述 redis的slow log记录了那些执行时间超过规定时长的请求.执行时间不包括I/O操作(比 ...
- php设计模式之工厂设计模式
概念: 工厂设计模式提供获取某个对象的新实例的一个接口,同时使调用代码避免确定实际实例化基类步骤. 很多高级模式都是依赖于工厂模式. 好处: PHP中能够创建基于变量内容 ...
- select 函数小结 -- 转自百度知道
http://zhidao.baidu.com/link?url=UVTXeK4ncKmnwatGUW2deMFylNYBuur-zHmK3w53NXNRpgPbhld2WdkMD766nKl_6Hj ...
- 微服务深入浅出(3)-- 服务的注册和发现Eureka
现来说一些Eureka的概念: 1.服务注册 Register 就是Client向Server注册的时候提供自身元数据,比如IP和Port等信息. 2.服务续约 Renew Client默认每隔30s ...
- shell开发规范
版本1.0版,参考网上的一些文章规整而来.后期打算继续修改.完成一篇适合自己的shell开发规范. 最新编辑时间:2017.6.25 一. 命名规范 1. 版本和运行参数 1) 脚本开始之前以注释形式 ...
- vue_router 动态路由
配置子路由: 路由的视图都需要使用view-router 子路由也可以嵌套路由使用: children来做嵌套如上图 使用location.页面name就可以做页面跳转 mounted:挂载,延迟跳转 ...
- BNUOJ 12756 Social Holidaying(二分匹配)
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=12756 Social Holidaying Time Limit: 3000ms Memo ...
- Flip Bits
Determine the number of bits required to flip if you want to convert integer n to integer m. Notice ...
- mvc4 @foreach 如何写@if 判断
不知道你想写在里面还是外面,我里外都写上,你可以参考下:@if(Model!=null){ foreach(var item in Model) { if(item.Name=="李四&qu ...
- error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: tmux: error while loading shared libraries: libevent-1.4.s ...