ZeePing @ 2024-06-11 20:32:06
#include<bits/stdc++.h>
using namespace std;
int maxx,m;
int g[501][501];
int dis[501],path[1005];
int beginn=9999999;
int cnt;
void dfs(int i){
cout<<i<<endl; //这里有问题, 为什么都是在下面这个for循环结束后用栈记录。 这里搜索一进来就输出不可以?
for(int j=beginn;j<=maxx;j++)
if(g[i][j]){
g[i][j]--;
g[j][i]--;
dfs(j);
}
}
int main(){
cin>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
g[x][y]++;
g[y][x]++;
dis[x]++;
dis[y]++;
maxx=max(maxx,max(x,y));
beginn=min(beginn,min(x,y));
}
int start=beginn;
int sum=0;
for(int i=beginn;i<=maxx;i++)
if(dis[i]%2){
start=i;
break;
}
dfs(start);
return 0;
}
by e_zhe @ 2024-06-13 18:20:57
一上来就输出得到的是 访问顺序,并不是 欧拉路径(回路),以下数据可以帮助解决这个问题。
题目:P7771
3 3
1 3
3 3
3 2
如果使用直接输出,我们会得到1 3 2 3,但由2到3并没有有向边,所以不合法。
使用栈的输出方式会得到1 3 3 2,合法。