• Hdu 1016 Prime Ring Problem (素数环经典dfs)


    Prime Ring Problem

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 20105    Accepted Submission(s): 9001

    Problem 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
     
    Source
     
    Recommend

    JGShining

     

    题意:素数环 (经典搜索)

    代码:

    写法1:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int yes[22];
    bool in[22];
    bool prim[50];
    int n;
    
    void primtable()
    {
        int i,j;
        memset(prim,0,sizeof(prim));
        for(i=3;i<=50;i++)
        {
            for(j=2;j<=i-1;j++)
            {
                if(i%j==0)
                    prim[i]=true;
            }
        }
    }
    
    void dfs(int pos)
    {
        int i,u;
        if(pos>n)
        {
            int m=yes[1]+yes[n];
            if(prim[m]==false)
            {
                for(i=1;i<=n;i++)
                    printf("%d%c",yes[i],i==n?'
    ':' ');
                //printf("
    ");          //这里PE了一次
            }
            return;
        }
        for(i=2;i<=n;i++)
        {
    		u=i+yes[pos-1];
            if(prim[u]==false&&in[i]==false)
            {
                yes[pos]=i;
                in[i]=true;
                dfs(pos+1);
                in[i]=false;
            }
        }
    }
    
    int main()
    {
        int cas=1;
        primtable();
        while(scanf("%d",&n)!=EOF)
        {
            memset(in,0,sizeof(in));
            yes[1]=1;
            in[1]=true;
            printf("Case %d:
    ",cas++);
            dfs(2);
            printf("
    ");
        }
        return 0;
    }
    
    // 203MS

    8765975

    2013-07-30 16:19:31

    Accepted

    1016

    203MS

    228K

    1125 B

    C++

     

     

    写法2:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int yes[22];
    bool in[22];
    bool prim[50];
    int n;
    
    void no_prim()
    {
        int tmp,i,j;
        for(i=3;i<20;i+=2)
        {
            if(prim[i]==false)
            {
                tmp=i<<1;
                for(j=i*i;j<50;j+=tmp)
                    prim[j]=true;
            }
        }
    }
    
    void dfs(int pos)
    {
        int i,u;
        if(pos>n)
        {
            int m=yes[1]+yes[n];
            if(prim[m]==false&&m%2||m==2)
            {
                for(i=1;i<=n;i++)
                    printf("%d%c",yes[i],i==n?'
    ':' ');
                //printf("
    ");
            }
            return;
        }
        for(i=2;i<=n;i++)
        {
    
            u=i+yes[pos-1];
            if((!prim[u]&&u%2||u==2)&&in[i]==false)
            {
                yes[pos]=i;
                in[i]=true;
                dfs(pos+1);
                in[i]=false;
            }
        }
    }
    
    int main()
    {
        no_prim();
        int cas=1;
        while(scanf("%d",&n)!=EOF)
        {
            memset(in,0,sizeof(in));
            yes[1]=1;
            in[1]=true;
            printf("Case %d:
    ",cas++);
            dfs(2);
            printf("
    ");
        }
        return 0;
    }
    
    // 234MS


     

    8765965

    2013-07-30 16:18:52

    Accepted

    1016

    234MS

    228K

    1143 B

    C++

  • 相关阅读:
    [转]Could not load file or assembly 'XXX' or one of its dependencies.
    网页上显示别人电脑没安装的字体,例如LED字体
    JS 保留小数点后面2位小数
    ASP.NET2.0揭秘读书笔记五——维护应用程序状态之cookie
    C#高级编程读书笔记之.NET体系结构
    ASP.NET2.0揭秘读书笔记之八——页面输出缓存
    《大话设计模式》读书笔记一 简单工厂模式
    C#高级编程读书笔记之继承
    ASP.NET 2.0揭秘读书笔记七——使用用户配置文件Profile
    终于成功安装了SQL SqlServer2005
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3230945.html
Copyright © 2020-2023  润新知