一道深搜题,给你一些朋友的关系,让你找到这样的一个排列,相邻的人是朋友,,
AC代码:
#include<cstdio> #include<string.h> #include<string> #define N 180 using namespace std; bool map[N][N],vis[N]; int path[N]; bool flag; int n,m,res; void dfs(int x) { if(flag) return; if(res==n) { printf("1"); for(int i=1;i<n;++i) printf(" %d",path[i]); printf("\n"); flag=true; return; } for(int i=2;i<=n;++i) if(!vis[i]&&map[x][i]) { if(res==n-1&&!map[i][1]) continue; path[res]=i; vis[i]=true; ++res; dfs(i); vis[i]=false; --res; } } int main() { while(~scanf("%d%d",&n,&m)) { memset(map,false,sizeof(map)); memset(vis,false,sizeof(vis)); for(int i=0;i!=m;++i) { int a,b; scanf("%d%d",&a,&b); map[a][b]=map[b][a]=1; } res=1,flag=false; vis[1]=true; dfs(1); if(!flag) printf("no solution\n"); }return 0; }