深搜并不是这道题的正规解法,但能用就行,先dfs,有空再试试正规解法! #include<stdio.h> #include<string.h> int g[105][105]; bool vis[105],flag; int n; int ver[105],num; void dfs(int v) { int i; if(num==n) { flag=true; return ; } for(i=1;i<=n;i++) { if(g[v][i]&&!vis[i]) { num++;vis[i]=true;ver[num]=i; dfs(i); if(flag) return ; num--;vis[i]=false; } } } void solve() { int i,j; for(i=1;i<=n;i++) { memset(vis,false,sizeof(vis)); vis[i]=true;ver[1]=i;num=1; dfs(i); if(flag){ for(j=1;j<n;j++) printf("%d ",ver[j]); printf("%d/n",ver[n]); return ; } } if(flag==false) printf("Impossible/n"); } int main() { int t,i,a,b; scanf("%d",&t); while(t--) { flag=false; scanf("%d",&n); memset(g,0,sizeof(g)); for(i=0;i<n*(n-1)/2;i++) { scanf("%d%d",&a,&b); //if(g[b][a]!=1) g[a][b]=1; } if(n==1) printf("%d/n",1); else solve(); } return 0; }