【图论】欧拉回路

五迷三道 提交于 2020-03-06 23:58:03

先上一个板子吧,单向的

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
const int maxn=1e3+10;
int tot,n,m,cnt;
int head[maxn],vis[maxn],ans[maxn];
struct E{
	int to,next;
}edge[maxn<<1];
void add(int u,int v){
	edge[tot].to=v;
	edge[tot].next=head[u];
	head[u]=tot++;
}
void dfs(int now){
	for(int i=head[now];i!=-1;i=edge[i].next){
		if(!vis[i]){
			vis[i]=1;
			dfs(edge[i].to);
			ans[cnt++]=edge[i].to;
		}
	}
}
int main(){
	cin>>n>>m;
	memset(head,-1,sizeof(head));
	memset(vis,0,sizeof(vis));
	memset(ans,0,sizeof(ans));
	tot=0;cnt=0;
	while(m--){
		int u,v;cin>>u>>v;
		add(u,v);
	}
	dfs(1);
	cout<<1<<endl;
	for(int i=cnt-1;i>=0;i--){
		cout<<ans[i]<<endl;
	}
}
/*
7 9
1 2
2 3
3 1
1 5
5 4
4 7
7 6
6 4
4 1
*/ 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!