http://ybt.ssoier.cn:8088/problem_show.php?pid=1341
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=0x3f3f3f;
const int MAXN=1000+10;
int a[MAXN][MAXN];
int ans[MAXN];
int k[MAXN];
int vis[MAXN];
int n,m,u,v;
int t=1;
void pr(){
for(int i=1;i<=n;i++){
cout<<ans[i]<<" ";
}
if(a[ans[n]][t]==1){
cout<<a[t];
}
return;//输出
}
void dfs(int id,int s){
if(s==n+1){
pr();
exit(0);//判断输出,结束程序
}
for(int i=1;i<=n;i++){
if(vis[i]==0&&a[i][id]==1){
vis[i]=1;
ans[s]=i;
dfs(i,s+1);
vis[i]=0;//上解锁+深搜下一个
}
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>v;
a[u][v]=1;
a[v][u]=1;//输入加存图
k[u]++;
k[v]++;
}
for(int i=1;i<=n;i++){
if(k[i]%2==1){
t=i;
}//找奇点
}
dfs(t,1);//深搜
return 0;
}