#include<iostream>
#include<cstring>
using namespace std;
int map[21][3];//记录与第i个城市相邻的三个城市
bool vis[22]; //标记有没有走过
int a[22];
int m,k;//m为第m个城市,k为第几种路线
void dfs(int x, int num) {
a[num] = x;
for (int i = 0; i < 3; i++)
{ //遍历一个城市接下来的三种情况
if (map[x][i] == m && num == 19) //count记录当前已经走过哪些num为19时即证明整个路径都被走过了
{
cout << k << ": ";//输出是第几组路径
k++;
for (int j = 0; j <= 19; j++)
cout << a[j] << " ";
cout << m << endl;
}
int t = map[x][i];
if (!vis[t]) //如果没被访问过
{
vis[t] = true;//将下一个能走的节点设为真
dfs(t, num + 1);
vis[t] = false;
}
}
}
int main()
{
for (int i = 1; i <= 20; i++)
{
scanf("%d %d %d", &map[i][0], &map[i][1], &map[i][2]);
}
while (cin >> m && m)
{
k = 1;
memset(vis, false, sizeof(vis));
memset(a, 0, sizeof(a));
vis[m] = true;
dfs(m, 0);
}
}
第十天-hdu-2181-dfs
最新推荐文章于 2021-01-03 13:11:05 发布