zoukankan      html  css  js  c++  java
  • noj算法 素数环 回溯法

    描述:

    把1到20这重新排列,使得排列后的序列A满足:
    a. 任意相邻两个数之和是素数
    b. 不存在满足条件a的序列B使得:A和B的前k(0 <= k <= 19)项相同且B的第k+1项比A的第k+1项小。(即按字典序排列的第一项)

    输入:

    没有输入。

    输出:

    输出A,两个数字之间用一个空格隔开,第一个数字前面和最后一个数字后面没有空格。

     

    题解:

           只打印字典序最小的一项即可。逐个数判断能否与我们放好的前一个数相加为素数,若不是素数,则回溯;若是,继续搜索。找到满足条件的第一个解即可。

     

    代码:

    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    #include <math.h>
    
    using namespace std;
    int num[22];
    bool used[22];
    int couse=1;
    
    bool check(int x,int y)
    {
        int k=2,i=x+y;
        while(k<=sqrt(i)&&i%k!=0) k++;
        if(k>sqrt(i)) return true;
        return false;
    }
    
    void print()
    {
        printf("%d",num[1]);
        for(int i=2;i<=20;i++)
            printf(" %d",num[i]);
        printf("
    ");
    }
    
    void Search(int x)
    {
        for(int i=1;i<=20;i++)
        {
            if(!used[i]&&check(num[x-1],i)&&couse==1)
            {
                num[x]=i;
                used[i]=true;
                if(x==20&&check(num[1],num[20])&&couse==1)
                    {print();couse++;return ;}
                Search(x+1);
                used[i]=false;
            }
        }
    }
    
    
    int main()
    {
        Search(1);
        return 0;
    }

     

     

     

  • 相关阅读:
    ptrace
    CentOS 5.4 final下Systemtap的安装
    SystemTap 静态探针安装包
    sysdig
    ORACLE 内部原理
    An introduction to KProbes
    CentOS6.5升级手动安装GCC4.8.2 与 CentOS 6.4 编译安装 gcc 4.8.1
    在Oracle Linux上安装dtrace
    dwarf调试信息格式入门
    MySQL 5.6.20-4 and Oracle Linux DTrace
  • 原文地址:https://www.cnblogs.com/y1040511302/p/9733392.html
Copyright © 2011-2022 走看看