欧拉回路貌似挺好写的,那么我们就找到最小的可以作为起点的点后,开始一个个枚举点i与当前点之间是否存在连边,存在则dfs(i)。
然后i每次从1-500枚举,那么dfs的次数为n+1次,每次枚举次数为500,所以复杂度是O(n^2)。
#include <bits/stdc++.h>
using namespace std;
const int N=2e3+5;
int n,i,j,u,v,s,ss;
int du[N],g[N][N],b[N];
int d=1e8;
inline void dfs(int x)
{
for (int i=1; i<=500; i++)
if (g[x][i]!=0)
{
g[x][i]--; g[i][x]--;
dfs(i);
}
b[ss]=x;
ss--;
}
int main(){
s=1e8;
scanf("%d",&n);
for (i=1; i<=n; i++)
{
scanf("%d%d",&u,&v);
s=min(s,u); s=min(s,v);
du[u]++; du[v]++;
g[u][v]++; g[v][u]++;
}
ss=n+1;
for (i=1; i<=