简单深搜
#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; }