美文网首页ACMACM题库~
ACM 之 A - Prime Ring Problem

ACM 之 A - Prime Ring Problem

作者: Gadore千里 | 来源:发表于2016-08-16 10:02 被阅读65次

    Description

    A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime. Note: the number of first circle should always be 1.

    Input

    n (0 < n < 20).

    output

    The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print solutions in lexicographical order. You are to write a program that completes above process. Print a blank line after each case.

    Sample Input

    6
    8

    Sample Output

    Case 1:
    1 4 3 2 5 6
    1 6 5 2 3 4

    Case 2:
    1 2 3 8 5 6 7 4
    1 2 5 8 3 4 7 6
    1 4 7 6 5 8 3 2
    1 6 7 4 3 8 5 2

    理解:

    学了深搜那么久……在比赛的时候碰到这个题还是一筹莫展。
    赛后才慢慢有了方法。用DFS 回溯。

    代码部分

    #include <cstdio>
    using namespace std;
    int n,a[21],b[21],t;
    int pri(int x){
        for(int i=2;i*i<=x;i++){
            if(x%i==0)
                return 0;
        }
        return 1;
    }
    void dfs(int num){
        if(n==num&&pri(a[n-1]+1)){
            for(int i=0;i<n;i++)
                printf(i!=n-1?"%d ":"%d\n",a[i]);
        }
        else{
            for(int i=2;i<=n;i++)
                if(!b[i]&&pri(i+a[num-1])){
                    a[num]=i;
                    b[i]=1;
                    dfs(num+1);
                    b[i]=0;//这里非常关键,搜完这个数下的情况,要把这个数恢复成未使用的状态才能进行下次的搜索
                }
        }
    }
    int main(){
        t=1;
        while(scanf("%d",&n)!=EOF){
            a[0]=1;
            for(int i=0;i<n;i++)
                b[i]=0;
            printf("Case %d:\n",t++);
            dfs(1);
            puts("");
        }
    }
    

    意见反馈 || 任何建议

    联系我(新浪)
    邮箱:qianlizhihao@gmail.com

    相关文章

      网友评论

        本文标题:ACM 之 A - Prime Ring Problem

        本文链接:https://www.haomeiwen.com/subject/mgkpsttx.html