标签:
题目大意:给出n,用1-n来组成一个环,要求相邻的两个数之和为素数。
解题思路:dfs,注意判断最后一个和第一个数之和也要为素数。
#include <cstdio>
int n, vis[20], rec[20] = {1}, isPrime[50];
void DFS(int cur) {
if (cur == n) {
if (isPrime[rec[cur - 1] + 1])
return;
printf("1");
for (int i = 1; i < n; i++)
printf(" %d", rec[i]);
puts("");
}
for (int i = 2; i <= n; i++) {
if (vis[i] || isPrime[rec[cur-1] + i])
continue;
vis[i] = 1;
rec[cur] = i;
DFS(cur + 1);
vis[i] = 0;
}
}
int main() {
for (int i = 2; i <= 40; i++)
for (int j = 2 * i; j <= 40; j += i)
isPrime[j] = 1;
int T = 0;
while (scanf("%d", &n) != EOF) {
if (T++) puts("");
printf("Case %d:\n", T);
DFS(1);
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/kl28978113/article/details/45460273