每搜到结果就随时在ji[]记录
num是搜到的步数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h>
bool map[109][109];
int ji[109],n,num;
bool v[109];
bool ok;
void dfs(int s)
{
int ts,i;
if(ok==1)
return ;
if(num==n)
{
ok=1;
return ;
}
for(i=1;i<=n;i++)
{
if(map[s][i]==1&&v[i]==0)
{
num++;
ji[num]=i;
v[i]=1;
dfs(i);
if(ok==1)
return ;
v[i]=0;
num--;
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==1)
{
printf("1\n");
continue;
}
int i,j,tn;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
map[i][j]=0;
}
tn=n*(n-1)/2;
int a,b;
for(i=1;i<=tn;i++)
{
scanf("%d%d",&a,&b);
map[a][b]=1;
}
ok=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
v[j]=0;
v[i]=1;
ji[1]=i;
num=1;
dfs(i);
if(ok==1)
{
printf("%d",ji[1]);
for(j=2;j<=n;j++)
{
printf(" %d",ji[j]);
}
printf("\n");
break;
}
}
if(ok==0)
{
printf("Impossible\n");
}
}
return 0;
}