1 #include<stdio.h>
2 #include<string.h>
3 int hash[25],map[25][5],m,k,jilu[25];
4 void dfs(int now,int step)
5 {
6 int i,judge;
7 jilu[step]=now;
8 if (step==20)
9 {
10 judge=0;
11 for (i=1;i<=3;i++)
12 if (map[now][i]==m) judge=1;
13 if (judge==1) k++; else return;
14 printf("%d: ",k);
15 for (i=1;i<=20;i++) printf(" %d",jilu[i]);
16 printf(" %d\n",m);
17 }
18 hash[now]=1;
19 for (i=1;i<=3;i++)
20 if (hash[map[now][i]]==0) dfs(map[now][i],step+1);
21 hash[now]=0;
22 return;
23 }
24 int main()
25 {
26 int i,j;
27 memset(map,0,sizeof(map));
28 for (i=1;i<=20;i++)
29 for (j=1;j<=3;j++)
30 {
31 scanf("%d",&m);
32 map[i][j]=m;
33 }
34 while (~scanf("%d",&m)&&m!=0)
35 {
36 k=0;
37 memset(hash,0,sizeof(hash));
38 dfs(m,1);
39 }
40 return(0);
41 }
http://acm.hdu.edu.cn/showproblem.php?pid=2181