就是枚举每个起点,因为一共就100个点,100*100,我当时觉得爆搜可以,可是发现懒的写,觉得这个方法太费事,当时如果做不出来题的时候就应该去尝试下,just do it。。
#include<iostream>
#include<cstdio>#include<string.h>
#include<cstring>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#define LOCAL
#define ll long long
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0xfffffff
#define mod 1000000007
using namespace std;
/*
题意:
想法:爆搜路径
*/
int g[109][109];
int vis[109];
int ans[109];
int n,t;
int flag;
void dfs(int x)
{
ans[t++] = x;
if(t==n){
flag = 1;
return ;
}
for(int i = 1;i<=n;i++)
{
if(!vis[i]&&g[x][i])
{
vis[i] = 1;
dfs(i);
if(flag) break;
t--;
vis[i] = 0;
}
}
}
int main()
{
//freopen("date.in","r",stdin);
int u,v;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(g,0,sizeof(g));
memset(vis,0,sizeof(vis));
for(int i = 0;i<n*(n-1)/2;i++)
{
scanf("%d%d",&u,&v);
g[u][v] = 1;
}
flag = 0;
for(int i = 1;i<=n;i++)
{
vis[i] = 1;
t = 0;
dfs(i);
if(flag)break;
vis[i] = 0;
}
if(!flag)
puts("Impossible");
else
{
for(int j = 0;j<n;j++)
{
if(j)
printf(" ");
printf("%d",ans[j]);
}
puts("");
}
}
return 0;
}