计蒜客 农场看守(欧拉回路)

问题描述

蒜头君最近做了农场看守,他每天晚上的工作就是巡视农场并且保证没有人破坏农场。从谷仓出发去巡视,并且最终回到谷仓。
蒜头君视力不太好,其他农场守卫只需要对农场的每一条连接不同场地的路走一遍就可以发现是不是有异常情况了。但是他很仔细和耐心,对农场的每一条连接不同场地的路需要走两遍,并且这两遍必须是不同的方向,因为他觉得应该不会两次都忽略农场中的异常情况。
每两块地之间一定至少有一条路连接。现在的任务就是帮他制定巡视路径。
输入格式
第一行输入两个整数 N(2
≤ N ≤ 10000)N(2≤N≤10000) 和 M(1≤
 M ≤ 50000)M(1≤M≤50000),表示农场一共有 N 块地 M 条边。
第二到 M+1行输入两个整数,表示对应的两块地之间有一条边。
输出格式
输出 2M+1个数,一个数占一行,表示蒜头君巡查路径上地的标号,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
 

#include<bits/stdc++.h>
using namespace std;
const int MAX_N=10010;
const int MAX_M=50010;
int n,m;
struct edge{
	int v;
	int vst;
	edge(){	}
	edge(int vv,int vvst)
	{
		v=vv;
		vst=vvst;
	}
}e[MAX_M];
vector<edge>ve[MAX_N];
void dfs(int x)
{
	for(int i=0;i<ve[x].size();i++)
	{
		edge &aa=ve[x][i];
		if(!aa.vst)
		{
			aa.vst=1;
			dfs(aa.v);
		}
	}
	cout<<x<<endl;
}
int main()
{
	cin>>n>>m;
	int u,v;
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v;
		ve[u].push_back({v,0});
		ve[v].push_back({u,0});
	}
	dfs(1);
	
	return 0;
}
/*
4 5
1 2
1 4
2 3
2 4
3 4
*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值