经过每条无向边i,j两次,一次从i到j,一次从j到i,可以把无向图看成有向图,然后求无向图的欧拉回路 代码: #include<iostream> #include<cstdio> #include<memory.h> #include<stack> using namespace std; const int MAX=10005; struct node { int v,next,vis; }g[MAX*10]; int adj[MAX]; int n,m,e; void add(int u,int v) { g[e].v=v; g[e].vis=0; g[e].next=adj[u]; adj[u]=e++; } void dfs(int u) { for(int i=adj[u];i!=-1;i=g[i].next) { if(!g[i].vis) { g[i].vis=1; dfs(g[i].v); } } printf("%d/n",u); } int main() { int i,j; memset(adj,-1,sizeof(adj)); e=0; scanf("%d%d",&n,&m); while(m--) { scanf("%d%d",&i,&j); add(i,j); add(j,i); } dfs(1); return 0; }