zoukankan      html  css  js  c++  java
  • #1016:Prime Ring Problem(经典DFS)

    原题链接

    题意:很容易理解,就是让你输出满足相邻的相加是素数的序列(注意不要重复)

    思路就是深搜思想把每种情况遍历一次

    代码实现:

    #include<iostream>
    #include<cstring>
    using namespace std;
    //素数打表标记每个素数,因为n最大是20,所以只要打到40
    bool prime[40] = { 0,1,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 f[21], n;
    bool book[21];
    void dfs(int num) {
        if (n == num && prime[f[num - 1] + f[0]]) {
            for (int i = 0; i < num - 1; ++i)
                printf("%d ", f[i]);
            cout << f[num - 1] << endl;
        }
        else {
            for (int i = 2; i <= n; ++i) {
                if (!book[i] && prime[i + f[num - 1]]) {
                    book[i] = true;
                    f[num++] = i;
                    dfs(num);
                    book[i] = 0;
                    --num;
                }
            }
        }
    }
    int main() {
        int num = 0;
        while (scanf("%d", &n) != EOF)
        {
            num++;
            printf("Case %d:
    ", num);
            memset(book, 0, sizeof(book));
            f[0] = 1;
            dfs(1);
            printf("
    ");
        }
    
        return 0;
    }
    
  • 相关阅读:
    连接mysql遇到的问题
    洛谷 P3369 【模板】普通平衡树(Treap/SBT)
    开博啦
    luogu【P2753】[USACO4.3]字母游戏Letter Game
    luogu【P3377】 【模板】左偏树
    POJ-2251
    HDU-1518
    Coderforces-455A
    UVA-1608
    Coderfocers-551C
  • 原文地址:https://www.cnblogs.com/RioTian/p/12826837.html
Copyright © 2011-2022 走看看