zoukankan      html  css  js  c++  java
  • UVA 524 素数环 【dfs/回溯法】

    Description

     
    A ring is composed of n (even number) circles as shown in diagram. Put natural numbers 1,2,3,...,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 <= 16)

    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.

     
    You are to write a program that completes above process.

    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


    【代码】:
    /*素数环*/
    #include <bits/stdc++.h>
    using namespace std;
    int n,prime[1005]={1},v[1005],a[1005];
    
    void get_prime()
    {
        int m=sqrt(2*n+0.5);//环-倍增
        memset(prime,1,sizeof(prime));//0为素数
        prime[0]=prime[1]=0;//非素数
        for(int i=2;i<=m;i++)
        {
            if(prime[i])//素数
            {
                for(int j=i+i;j<=2*n;j+=i)
                {
                    prime[j]=0;//非素数
                }
            }
        }
    }
    
    void dfs(int cur)
    {
        if(cur == n && prime[ a[0]+a[n-1] ])
        {
            for(int i=0; i<n; i++)
            {
                 printf("%d%c", a[i], i == n - 1 ? '
    ' : ' ');
            }
           // printf("
    ");
        }
        else
        {
            for(int i=2; i<=n; i++)
            {
                if( !v[i] && prime[ i + a[cur-1] ] )
                {
                    a[cur] = i;
                    v[i]=1;
                    dfs(cur+1);
                    v[i]=0;
                }
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        //初始化
        memset(v,0,sizeof(v));
        a[0]=1;
    
        get_prime();
        dfs(1);
    }
  • 相关阅读:
    windows禅道环境搭建
    python-django开发学习笔记四
    迭代器
    小数据池
    正则表达式
    文件操作
    深浅拷贝
    隐藏文件夹命令
    python解释器安装教程以及环境变量配置
    计算机基础应用
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8056995.html
Copyright © 2011-2022 走看看