调试了半天 只有80分 耐心耗光了改天心情好再改
#include<bits/stdc++.h>
using namespace std;
const int maxn=10100;
struct node{
int id,v;
};
int N,M,F=0;
vector<node> G[maxn];
vector<int> List;
int father[maxn];
bool cmp(node a,node b){
return a.id<b.id;
}
void LDFS(int r){
if(F==1)
return;
int fla=0;
for(int i=0;i<G[r].size();i++){
int u=G[r][i].id,j;
for(j=0;j<G[u].size();j++){
if(G[u][j].id==r)
break;
}
if(G[r][i].v==1&&G[u][j].v==1){
fla=1;
G[r][i].v=0;
G[u][j].v=0;
List.push_back(u);
LDFS(u);
List.pop_back();
G[r][i].v=1;
G[u][j].v=1;
}
if(F==1)
return;
}
if(fla==0){
if(List.size()==M+1){
F=1;
for(int i=0;i<List.size();i++){
printf("%d%c",List[i],i==List.size()-1?'\n':' ');
}
}
}
}
int findfather(int r){
int x=r;
while(father[x]!=x){
x=father[x];
}
while(father[r]!=r){
int y=father[r];
father[r]=x;
r=y;
}
return x;
}
void Union(int a,int b){
int x1=findfather(a),x2=findfather(b);
if(x1!=x2){
father[x1]=x2;
}
}
int main(void)
{
cin>>N>>M;
for(int i=1;i<=N;i++){
father[i]=i;
}
for(int i=0;i<M;i++){
int a,b;
scanf("%d %d",&a,&b);
G[a].push_back({b,1});
G[b].push_back({a,1});
Union(a,b);
}
for(int i=1;i<=N;i++){
sort(G[i].begin(),G[i].end(),cmp);
}
for(int i=1;i<=N;i++){
if(findfather(i)!=findfather(1)){
printf("-1");
return 0;
}
}
List.push_back(1);
LDFS(1);
if(F==0)
printf("-1");
return 0;
}