题目大意:给你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; }
原文地址:http://blog.csdn.net/sky_miange/article/details/45110411