看见这个题想起来哈密顿图,想念离散老师
https://cn.vjudge.net/contest/65997#problem/C
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
vector<int> v[25];
int cas, m;
bool vis[25];
int ans[25];
void dfs(int x, int cnt)
{
if(cnt == 20 && x == m)
{
printf("%d: ", ++ cas);
printf("%d ", m);
for(int i = 1; i < 20; i ++)
printf("%d ", ans[i]);
printf("%d\n", m);
}
for(int i = 0; i < 3; i ++)
{
if(! vis[v[x][i]]){
vis[v[x][i]] = 1;
ans[cnt + 1] = v[x][i];
dfs(v[x][i], cnt + 1);
vis[v[x][i]] = 0;
}
}
}
int main()
{
int a, b, c;
for(int i = 1; i <= 20; i ++)
{
scanf("%d%d%d", &a, &b, &c);
v[i].push_back(a);
v[i].push_back(b);
v[i].push_back(c);
sort(v[i].begin(), v[i].end());
}
while(scanf("%d", &m) != EOF && m)
{
cas = 0;
memset(vis, 0, sizeof(vis));
//vis[m] = 1;
dfs(m, 0);
}
return 0;
}