zoukankan      html  css  js  c++  java
  • HDU-1016【素数环】

    题意:本题题意就是构成一个素数环。即相邻两数之和要为素数。环的元素个数在1到20之间。

    素数-只能被1和它本身整除的数

    输入6就是1-6排成一个相邻数相加是素数;环,第一个和最后一个加起来也要是素数

    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
    AC代码:
       #include <iostream>
        #include <cstring>
        #include <string>
        #include <cstdio>
        #include <cmath>
        using namespace std;
    int a[12]={2,3,5,7,11,13,17,19,23,29,31,37},b[40]={0},c[22]={0},d[22]={0},n,t=1;
    int dfs(int k)
    {
        int i;
        if(k==n+1&&b[c[n]+c[1]]==1)
        {
            for(i=1;i<=n;i++)
            {
                if(i==1)
                    printf("%d",c[1]);
                else
                    printf(" %d",c[i]);
            }
            printf("
    ");
            return 0;
        }
        else
        {
            for(i=1;i<=n;i++)
            {
                if(d[i]!=0&&b[c[k-1]+d[i]]==1)
                {
                    d[i]=0;c[k]=i;
                    dfs(++k);
                    d[i]=i;c[k]=0;k--;
                }
            }
        }
        return 0;
    }
    
    int main()
    {
        int i;
        while(scanf("%d",&n)!=EOF)
        {
        for(i=0;i<12;i++)
            b[a[i]]=1;
        d[1]=0;c[1]=1;
        for(i=2;i<=n;i++)
            d[i]=i;
        printf("Case %d:
    ",t++);
        dfs(2);
         printf("
    ");
        }
        return 0;
    }
     
    草稿代码:
    /*su  shu  huan*/
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    int a[22],n,b[22]={1},k;
    int num[12] = {2,3,5,7,11,13,17,19,23,29,31,37},nu[40];
    
    int dfs2(int m)
    {
        int i;
        if(m==n+1&&nu[b[1]+b[n]]==1)
        {
             for(i=1;i<n;i++)
                printf("%d ",b[i]);
            printf("%d
    ",b[n]);
        }
        else
        {
            for(i=2;i<=n;i++)
            {
                if(a[i]==1&&nu[i+b[m-1]])
                {
                    //m++;
                    b[m++]=i;
                    a[i]=0;
                    dfs2(m);
                    a[i]=1;
                    m--;
                }
            }
        }
        return 0;
    }
    
    int dfs(int m)
    {
        int t=0,i;
        for(i=1;i<=n;i++)
        {
            if(a[i]==1)
            {
                t=1;break;
                //printf("-A-");break;
            }
        }
        //printf("t=%d
    ",t);
        if(t==0&&nu[b[1]+b[n]]==1)
        {
            for(i=0;i<n-1;i++)
                printf("%d ",b[i+1]);
            printf("%d
    ",b[n]);
        }
        if(t==0)
        {
             for(i=2;i<=n;i++)
                b[i]=0;
            k=1;b[1]=1;
            return 0;
        }
    
        for(i=2;i<=n;i++)
        {
            if(a[i]==1&&nu[i+m]==1)
            {printf("-%d-
    ",i);
                a[i]=0;
                b[++k]=i;
                dfs(i);
                a[i]=1;
                b[k]=0;
                k--;
            }
        }
        for(i=2;i<=n;i++)
                b[i]=0;
            k=1;b[1]=1;
        return 0;
    }
    int main()
    {
        int i;
        k=1;b[1]=1;
        for(i=0;i<12;i++)
            nu[num[i]]=1;
        scanf("%d",&n);
        for(i=2;i<=n;i++)
            a[i]=1;
            a[1]=0;b[1]=1;
        dfs2(2);
        return 0;
    }
    //全部搜索后符合题意的输出,然后回退一步,在回退一部,直到回到第一步,并且第一步全部循环了
    //核心思想,回退的时候所有状态都还原
  • 相关阅读:
    iOS静态库的制作
    iOS视频硬件编解码H264
    cocoapods私有库创建
    Mac OS 下基于XAMPP的Phabricator 安装
    OpenGL01(你好,窗口)
    GPUImage类注解
    cocoapods公有库创建
    GCD-调度组
    对初级程序员的思考
    Swift学习(4懒加载、计算型属性、反射机制)
  • 原文地址:https://www.cnblogs.com/zhangfengnick/p/5851112.html
Copyright © 2011-2022 走看看