#include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; struct node { int a[3]; }f[22]; bool hash[22]; int stack[22]; int s,t; void dfs(int m,int cur) { int i,k; if(cur==21 && m==s) { for(i=0;i<21;i++) { if(i!=0)printf(" "); else printf("%d: ",++t); printf("%d",stack[i]); } printf("\n"); } for(i=0;i<3;i++) { k=f[m].a[i]; if(hash[k]==false) { hash[k]=true; stack[cur]=k; dfs(k,cur+1); hash[k]=false; } else if(k==s && cur==20) { stack[cur]=k; dfs(k,cur+1); } } } int main() { int i; while(scanf("%d",&f[1].a[0])>0) { if(f[1].a[0]==0)break; scanf("%d%d",&f[1].a[1],&f[1].a[2]); for(i=2;i<=20;i++) scanf("%d%d%d",&f[i].a[0],&f[i].a[1],&f[i].a[2]); for(i=1;i<=20;i++) sort(f[i].a,f[i].a+3); scanf("%d",&s); memset(hash,false,sizeof(hash)); hash[s]=true; stack[0]=s; t=0; dfs(s,1); } return 0; }
原文:http://www.cnblogs.com/KID-XiaoYuan/p/6414046.html