他凭什么不对啊啊啊啊啊啊啊!
#include <bits/stdc++.h>
using namespace std;
const int N=5e3;
int n,m,x,y,top,fir,sec,unv;
int stk[N+5];
bool g[N+5][N+5],mark[N+5],ins[N+5],vis[N+5],vis2[N+5];
void dfs1(int u,int fa){
printf("%d ",u);
for(int i=1;i<=n;i++){
if(!g[u][i]||i==fa)continue;
dfs1(i,u);
}
return ;
}
void dfs2(int u,int fa){
stk[++top]=u;
ins[u]=vis[u]=true;
for(int i=1;i<=n;i++){
if(!g[u][i]||i==fa)continue;
if(ins[i]){
int j;
for(j=top;stk[j]!=i;j--){
mark[stk[j]]=true;
ins[stk[j]]=false;
}
mark[i]=true;
fir=min(u,stk[j+1]);
sec=max(u,stk[j+1]);
return ;
}
if(!vis[i])dfs2(i,u);
}
--top;
ins[u]=false;
return ;
}
void dfs5(int u,int fa){
printf("%d ",u);
vis2[u]=true;
for(int i=1;i<=n;i++){
if(!g[u][i]||i==fa||vis2[i])continue;
dfs5(i,u);
}
return ;
}
void dfs4(int u,int fa){
printf("%d ",u);
vis2[u]=true;
for(int i=1;i<=n;i++){
if(!g[u][i]||i==fa||vis2[i])continue;
if(mark[i]){
if((unv==n+1||unv<i)&&sec<i)return ;
for(int j=i+1;j<unv;j++){
if(!g[u][j]||j==fa)continue;
unv=j;
}
dfs4(i,u);
for(int j=i+1;j<=n;j++){
if(!g[u][j]||j==fa)continue;
dfs5(j,u);
}
return ;
}else dfs5(i,u);
}
return ;
}
void dfs3(int u,int fa){
printf("%d ",u);
vis2[u]=true;
if(mark[u]){
for(int i=1;i<=n;i++){
if(!g[u][i]||i==fa||vis2[i])continue;
if(i==fir)dfs4(fir,u);
else if(i==sec)dfs5(sec,u);
else dfs3(i,u);
}
return ;
}
for(int i=1;i<=n;i++){
if(!g[u][i]||i==fa)continue;
dfs3(i,u);
}
return ;
}
int main(){
// freopen("travel.in","r",stdin);
// freopen("travel.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
g[x][y]=g[y][x]=true;
}
if(m==n-1)dfs1(1,0);
else{
dfs2(1,0);
unv=n+1;
dfs3(1,0);
}
return 0;
}