POJ 2230 DFS
来源:互联网 发布:2014网络流行语口头禅 编辑:程序博客网 时间:2024/06/07 03:46
题意:
Bessie 最近做了农场看守,他每天晚上的工作就是巡视农场并且保证没有坏人破坏农场。从谷仓出发去巡视,并且最终回到谷仓。
Bessie 视力不是很好,不能像其他农场的看守一样,对农场的每一条连接不同场地的路走一遍就可以发现是不是有异常情况,他需要每条路都走两遍,并且这两边必须是不同的方向,因为他觉得自己应该不会两次都忽略农场中的异常情况。
每块地之间一定会由至少一条路相连。现在的任务就是帮他制定巡视路线。前提假设一定存在满足题意的路径。
输入:
第一行输入两个数N(2 <= N <= 10000)和M(1 <= M <= 50000),表示农场一共有N块地M条路。
第二到M+1行输入两个整数,表示对应的两块地之间有一条路。
输出:
输出我2 * (m + 1)行,每行一个数字,表示Bessie 的巡查路径上地的编号,1号为谷仓,从1开始,从1结束。如果有多种你答案,输出任意一种。
样例输入
4 5
1 2
1 4
2 3
2 4
3 4
样例输出
1
2
3
4
2
1
4
3
2
4
1
解题思路:
由于是无向边,而且每条边要求正反各走一次,所以一定存在欧拉回路。存图时把每条无向边看成两条相反的有向边,直接利用欧拉回路求解。
(转自:http://www.cnblogs.com/Ash-ly/p/5398425.html)
不用回溯 一定有解
#include <cstdio>using namespace std;int n,m,tot=2,v[100001],first[10001],next[100001],vis[1000001],a[1000001],xxx,yyy;void add(int xx,int yy){v[tot]=yy,next[tot]=first[xx],first[xx]=tot++;}void dfs(int x){ for(int i=first[x];i;i=next[i]) if(!vis[i]) vis[i]=1,dfs(v[i]),printf("%d\n",x);}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d%d",&xxx,&yyy),add(xxx,yyy),add(yyy,xxx); printf("1\n"); dfs(1);}
0 0
- poj 2230 DFS
- POJ 2230 DFS
- DFS POJ
- POJ DFS
- POJ 2230 Watchcow 欧拉路径 DFS
- poj 2230 Watchcow (DFS + 欧拉回路)
- poj 3083 DFS+DFS+BFS
- POJ 1753 ID+DFS
- poj 1950 数字dfs
- poj 1816(trie+dfs)
- POJ 3107 Godfather(DFS)
- poj 3620(DFS)
- poj 1020 DFS
- poj 2362Square(DFS)
- POJ 2676 Sudoku dfs
- POJ 2357 Labyrinth [DFS]
- poj 1011 dfs
- poj 1190 dfs(生日蛋糕)
- 冒泡法排序
- iOS 截屏+裁剪
- Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm
- rapidjson的read和write的sample
- 【java】自定义ClassLoader 加载外部类和jar文件
- POJ 2230 DFS
- Java三大特性之继承
- Ubuntu安装JDK
- html表单学习笔记
- eclipse反编译查看源码工具安装教程
- 【leetcode】238. Product of Array Except Self
- Java web 定时执行任务
- 在iOS应用程序中打开设备设置界面及其中某指定的选项界面
- 深入掌握include_once与require_once的区别