zoukankan      html  css  js  c++  java
  • HDU 1016 Prime Ring Problem

    http://acm.hdu.edu.cn/showproblem.php?pid=1016

    Problem Description
    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.

     
    Input
    n (0 < n < 20).
     
    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. 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
     
    时间复杂度:$O(n!)$
    代码:
    #include <stdio.h>
    #include <string.h>
    int book[30], a[30], n;
    int prime(int x) {
        int i;
        for (i = 2; i <= x / 2; i ++)
            if (x % i == 0) return 0;
        return 1;
    }
    
    void dfs(int step) {
        if (step == n + 1 && prime(a[1] + a[n])) {
            for (int i = 1; i <= n - 1; i ++)
                printf("%d ", a[i]);
            printf("%d
    ", a[n]);
            return;
        }
        
        for (int i = 2; i <= n; i ++) {
            if (book[i] == 0) {
                if (prime(i + a[step - 1])) {
                    book[i] = 1;
                    a[step] = i;
                    dfs(step + 1);
                    book[i] = 0;
                }
            }
        }
        return;
    }
    
    int main() {
        int kase = 0;
        a[1] = 1;
        while (~scanf("%d", &n)) {
            memset(book, 0, sizeof(book));
            printf("Case %d:
    ", ++kase);
            dfs(2);
            printf("
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    西安.NET俱乐部群 推广代码
    跟我学Makefile(六)
    跟我学Makefile(五)
    跟我学Makefile(四)
    跟我学Makefile(三)
    跟我学Makefile(二)
    Kconfig文件说明2
    Kconfig文件说明
    kernel内核配置说明
    makefile中ifeq与ifneq dev/null和dev/zero简介 dd命令
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/9465172.html
Copyright © 2011-2022 走看看