简单深搜
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int map[21][3],b[22],st,num;
bool vis[21];
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
void dfs(int u,int step)
{
int i,j;
b[step]=u;
if(step==20&&(map[u][0]==st||map[u][1]==st||map[u][2]==st))
{//刚开始没把||的条件语句用括起来,w了几次
b[21]=st;
printf("%d: ",num++);
for(i=1;i<=21;i++)
printf(" %d",b[i]);
printf("\n");
}
for(i=0;i<3;i++)
{
if(vis[map[u][i]])
{
vis[map[u][i]]=false;
dfs(map[u][i],step+1);
vis[map[u][i]]=true;
}
}
}
int main()
{
int i=3,j,m;
for(i=1;i<=20;i++)
scanf("%d%d%d",&map[i][0],&map[i][1],&map[i][2]);
for(i=1;i<=20;i++)
qsort(map[i],3,sizeof(map[i][0]),cmp);
while(scanf("%d",&st),st)
{
num=1;
memset(b,-1,sizeof(b));
memset(vis,true,sizeof(vis));
vis[st]=false;
b[1]=st;
dfs(st,1);
}
return 0;
}