zoukankan      html  css  js  c++  java
  • Day2-M-Prime Ring Problem-HDU1016

    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. 

     

    Inputn (0 < n < 20). 
    OutputThe 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

    思路:依旧是回溯法,逐个判断即可,注意首尾也需要判断一下,用筛法建个表,代码如下:
    const int maxm = 22;
    
    int n, vis[maxm], prime[330], res[maxm], kase = 0;
    
    void buildTable() {
        for (int i = 2; i * i < 330; ++i) {
            if(!prime[i]) {
                for (int j = i * i; j < 330; j += i)
                    prime[j] = 1;
            }
        }
    }
    
    void dfs(int i) {
        if(i == n && !prime[res[0] + res[n-1]]) {
            for (int j = 0; j < n; ++j) {
                if(j)printf(" ");
                printf("%d", res[j]);
            }
            printf("
    ");
        }
        for (int j = 2; j <= n; ++j) {
            if(!vis[j] && !prime[res[i-1] + j]) {
                vis[j] = 1;
                res[i] = j;
                dfs(i + 1);
                vis[j] = 0;
            }
        }
    }
    
    
    int main() {
        buildTable();
        while(scanf("%d",&n) != EOF) {
            printf("Case %d:
    ", ++kase);
            memset(vis, 0, sizeof(vis));
            res[0] = 1;
            vis[1] = 1;
            dfs(1);
            printf("
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    mysql常用基本命令
    mysql8.0.13下载与安装图文教程
    k8s ingress 增加跨域配置
    Jenkins 备份恢复插件 thinBackup 使用
    k8s HA master 节点宕机修复
    nginx 跨域问题解决
    mongodb 3.4.24 主从复制
    k8s 线上安装 jenkins并结合 jenkinsfile 实现 helm 自动化部署
    k8s helm 运用与自建helm仓库chartmuseum
    centos6 源码安装 unzip
  • 原文地址:https://www.cnblogs.com/GRedComeT/p/11231268.html
Copyright © 2011-2022 走看看