zoukankan      html  css  js  c++  java
  • 素数环

    Description

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

     因为起点已经确定为1;

    只要用dfs回溯就行;

    同是要注意使用vis[]数组判重;

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int is_prime(int x) {
     7   for(int i = 2; i*i <= x; i++)
     8     if(x % i == 0) return 0;
     9   return 1;
    10 }
    11 
    12 int n, A[50];
    13 bool isp[50],vis[50];
    14 void dfs(int cur) {
    15   if(cur == n && isp[A[0]+A[n-1]]){
    16     for(int i = 0; i < n; i++){
    17       if(i != 0) printf(" ");
    18       printf("%d", A[i]);
    19     }
    20     printf("
    ");
    21   }
    22   else for(int i = 2; i <= n; i++)
    23     if(!vis[i] && isp[i+A[cur-1]]){
    24       A[cur] = i;
    25       vis[i] = 1;
    26       dfs(cur+1);
    27       vis[i] = 0;
    28     }
    29 }
    30 
    31 int main() {
    32   int kase = 0;
    33   while(scanf("%d", &n) == 1 && n > 0){
    34     if(kase > 0) printf("
    ");
    35     printf("Case %d:
    ", ++kase);
    36     for(int i = 2; i <= n*2; i++) isp[i] = is_prime(i);
    37     memset(vis, 0, sizeof(vis));
    38     A[0] = 1;
    39     dfs(1);
    40   }
    41   return 0;
    42 }
    View Code
  • 相关阅读:
    jquery animate()方法 语法
    jquery unload方法 语法
    jquery undelegate()方法 语法
    jquery unbind()方法 语法
    jquery trigger() 方法 语法
    jquery toggle()方法 语法
    jquery change() 函数 语法
    jquery blur()函数 语法
    jquery bind()方法 语法
    jquery checked选择器 语法
  • 原文地址:https://www.cnblogs.com/demodemo/p/4690596.html
Copyright © 2011-2022 走看看