http://acm.hdu.edu.cn/showproblem.php?pid=2181
分析:没啥说的,直接暴搜
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int NM=25;
int a[NM][NM],save[NM],ans;
bool vis[NM];
void DFS(int x,int n,int cc)
{
int i;
if(cc==21 && x==n){
printf("%d: ",ans++);
for(i=0;i<=20;i++)
printf(" %d",save[i]);
printf("\n");
}
for(i=1;i<=20;i++){
if(!vis[i] && a[x][i]){
save[cc]=i;
vis[i]=1;
DFS(i,n,cc+1);
vis[i]=0;
}
}
}
int main()
{
int i,n,x,y,z;
for(i=1;i<=20;i++){
scanf("%d%d%d",&x,&y,&z);
a[i][x]=a[i][y]=a[i][z]=1;
}
ans=1;
while(scanf("%d",&n)&&n){
save[0]=n;
memset(vis,0,sizeof(vis));
DFS(n,n,1);
}
return 0;
}