原文链接 http://blog.csdn.net/yongnuzhibu/article/details/7442248
#include <stdio.h>
#define maxn 65
int dfs(int n, int *x, int *y, int *z){
if(n == 0) return 1;
if(y[0] && n == y[1]) return 0;
if(x[0] && n == x[1]){
x[1] = x[0] - 1;
dfs(n-1, ++x, z, y);
}
else if(z[0] && n == z[1]){
z[1] = z[0] - 1;
dfs(n-1, y, x, ++z);
}
}
int main(){
int a[maxn], b[maxn], c[maxn];
int i, t, n;
scanf("%d", &t);
while(t--){
scanf("%d", &n);
scanf("%d", &a[0]);
for(i = 1; i <= a[0]; ++i) scanf("%d", &a[i]);
scanf("%d", &b[0]);
for(i = 1; i <= b[0]; ++i) scanf("%d", &b[i]);
scanf("%d", &c[0]);
for(i = 1; i <= c[0]; ++i) scanf("%d", &c[i]);
dfs(n, a, b, c) ? printf("true\n") : printf("false\n");
}
return 0;
}