UVA - 524 Prime Ring Problem


题目大意:给出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;
}

你可能感兴趣的:(UVA - 524 Prime Ring Problem)