链接:点击打开链接
题意:给出一个无向图要求每条边只能走两遍而且两次的方向必须不同,输出任意一种可能
代码:
#include <vector> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; int N,M,cnt,ansi; int vis[100005],ans[200005],head[100005]; struct node{ int to,next; }G[200005]; void addedge(int u,int v){ G[cnt].to=v; G[cnt].next=head[u]; head[u]=cnt++; } void dfs(int s){ int k; for(k=head[s];k!=-1;k=G[k].next){ if(!vis[k]){ vis[k]=1; dfs(G[k].to); ans[ansi++]=k; } } } //dfs记录欧拉回路 int main(){ int i,j,u,v; while(scanf("%d%d",&N,&M)!=EOF){ cnt=ansi=0; memset(vis,0,sizeof(vis)); memset(head,-1,sizeof(head)); for(i=0;i<M;i++){ scanf("%d%d",&u,&v); addedge(u,v); addedge(v,u); } //相当于双向边,但走的时候只走一条边 dfs(1); printf("1\n"); for(i=ansi-1;i>=0;i--) printf("%d\n",G[ans[i]].to); //输出欧拉回路 } return 0; }