题目大意:给你n*(n-1)条路线,代表可以从a走到b。
问你遍历所有点的路径输出。(可以输出任意解,每个城市只能走一次)
因为可以输出任意解,直接暴力搜索就好了。
#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
#define LL __int64
typedef long long ll;
#define PI 3.1415926
int mat[150][150];
int vis[150];
int b[150];
int n,l,flag;
void dfs(int x)
{
int i;
if(l==n)
{
flag=1;
return;
}
for(i=1; i<=n; i++)
{
if(!vis[i]&&mat[x][i])
{
b[l++]=i;
vis[i]=1;
dfs(i);
if(flag==1)
return;
vis[i]=0;
l--;
}
}
return;
}
int main()
{
int t,i;
cin>>t;
while(t--)
{
int a,c;
cin>>n;
if(n==1)
{
cout<<1<<endl;
continue;
}
memset(b,0,sizeof(b));
memset(mat,0,sizeof(mat));
memset(vis,0,sizeof(vis));
for(i=1; i<=n*(n-1)/2; i++)
{
cin>>a>>c;
mat[a][c]=1;
}
flag=0;
for(i=1; i<=n; i++)
{
l=0;
b[l++]=i;
vis[i]=1;
dfs(i);
l--;
if(flag)
break;
vis[i]=0;
}
if(flag)
{
for(i=0; i<n; i++)
{
if(i!=n-1)
cout<<b[i]<<" ";
else
cout<<b[i];
}
cout<<endl;
}
else
cout<<"Impossible"<<endl;
}
return 0;
}