dfs 题目http://acm.hdu.edu.cn/showproblem.php?pid=2181
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int G[30][30];
int vis[30];
int rr[30],count=1,s;
void dfs(int m,int cnt){
// cout<<m<<endl;
vis[m]=1;
rr[cnt]=m;
if(cnt==19){
if(G[m][s]){
printf("%d: ",count);
for(int i=0;i<20;i++){
printf("%d ",rr[i]);
}
count++;
printf("%d\n",s);
}
return ;
}
for(int i=1;i<=20;i++){
if(G[m][i]==1&&vis[i]==0){
vis[i]=1;
dfs(i,cnt+1);
vis[i]=0;
}
}
return ;
}
int main(){
int m=1;
int a,c,b;
for(int i=1;i<=20;i++){
scanf("%d%d%d",&a,&b,&c);
G[i][a]=1;
G[a][i]=1;
G[i][b]=1;
G[b][i]=1;
G[i][c]=1;
G[c][i]=1;
}
while(true){
memset(vis,0,sizeof(vis));
scanf("%d",&s);
if(s==0){
break;
}
dfs(s,0);
}
return 0;
}