#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<sstream>
using namespace std;
#define L 101
int F,N;
int x,y;
int g[L][L]; //记录路径
int ans[L]; //记录路径
int len=0;
bool flag=false; //状态变量
int f[L]; //桶排序
void printIt(){
for(int i=1;i<=F+1;i++){
cout << ans[i] << endl;
}
}
void dfs(int i){ //从i点出发 //距离为s
ans[++len]=i;
if(len==F+1){printIt();flag=true;return;} //一组数据就够了
for(int j=1;j<=N;j++){
if(flag) return;
if(g[i][j]){
g[i][j]=0; //先占领后发展
g[j][i]=0;
dfs(j);
g[i][j]=1; //回溯
g[j][i]=1;
}
}
len--; //再回溯
}
int main()
{
cin >> F;
//1.建图
for(int i=1;i<=F;i++){
cin >> x >> y;
//统计节点个数
if(!f[x]){N++;f[x]=1;}
if(!f[y]){N++;f[y]=1;}
g[x][y]=1; //无向图
g[y][x]=1;
}
//2.遍历图 - 深搜
for(int i=1;i<=N;i++){
if(flag)return 0;
dfs(i);
}//确定起点
return 0;
}
/*
9
1 2
2 3
3 4
4 2
4 5
2 5
5 6
5 7
4 6
*/
//cout << "输入:"
练习3 - 铲雪车(snow)
最新推荐文章于 2024-04-24 16:55:48 发布