简单的DFS代码 ,读者自己理解吧
#include <cstdio>
#include <cstring>
#include <cstdlib>
int pri[40] = {
0 ,0 ,1 ,1 ,0 ,1 ,0 ,1 ,0 ,0 ,\
0 ,1 ,0 ,1 ,0 ,0 ,0 ,1 ,0 ,1 ,\
0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,1 ,\
0 ,1 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 };
int n, res[22], kase = 0, vis[22];
void DFS(const int d){
if (d == n){
if (pri[1 + res[d - 1]]){
for (int i = 0; i < n; ++i)
printf("%d%c", res[i], i == n - 1 ? '\n' : ' ');
}
return;
}
for (int i = 2; i <= n; ++i){
if (!vis[i] && pri[i + res[d - 1]]){
vis[i] = 1;
res[d] = i; DFS(d + 1);
vis[i] = 0;
}
}
}
int main(){
while (~scanf("%d", &n)) {
printf("Case %d:\n", ++kase);
memset(vis, 0, sizeof(vis));
res[0] = 1; vis[1] = 1;
DFS(1);
printf("\n");
}
return 0;
}