HDU-1016素数环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
 
/*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\n",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\n",t);
    if(t==0&&nu[b[1]+b[n]]==1)
    {
        for(i=0;i<n-1;i++)
            printf("%d ",b[i+1]);
        printf("%d\n",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-\n",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;
}

 

//全部搜索后符合题意的输出,然后回退一步,在回退一部,直到回到第一步,并且第一步全部循环了
//核心思想,回退的时候所有状态都还原

以上是关于HDU-1016素数环的主要内容,如果未能解决你的问题,请参考以下文章

素数环(dfs&&STL做法)HDU - 1016

HDU 1016 Prime Ring Problem(素数环问题)

UVA524 素数环 Prime Ring Problem

HDU 1016Prime Ring Problem

hdu 1016 dfs+素数表打表

hdu1016Prime Ring Problem