题目链接:ZOJ 3322 Strange Country II
越来越水了,DFS都写不明白了。。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_N = 100 + 10;
bool vis[MAX_N];
bool G[MAX_N][MAX_N];
int ans[MAX_N];
bool ak;
int n, m, u, v;
void dfs(int rt, int cnt)
{
if(cnt >= n)
{
ak = true;
return;
}
for(int i = 1; i <= n; i++)
{
if(G[rt][i])
{
if(!vis[i])
{
vis[i] = 1;
dfs(i, cnt + 1);
vis[i] = 0;
ans[cnt] = i;
}
if(ak)
break;
}
}
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
memset(G, 0, sizeof(G));
memset(vis, 0, sizeof(vis));
scanf("%d", &n);
m = n * (n - 1) / 2;
for(int i = 0; i < m; i++)
{
scanf("%d%d", &u, &v);
G[u][v] = 1;
}
ak = false;
for(int i = 1; i <= n; i++)
{
vis[i] = 1;
ans[0] = i;
dfs(i, 1);
if(ak)
break;
memset(vis, 0, sizeof(vis));
}
if(ak)
{
for(int i = 0; i < n - 1; i++)
printf("%d ", ans[i]);
printf("%d\n", ans[n - 1]);
}
else
puts("Impossible");
}
return 0;
}