zoukankan      html  css  js  c++  java
  • 3thweek.c uva 524.prime ring problem

    题意:

    输入正整数n,把整数1,2,3,……,n组成一个环,使得相邻的两个整数之和均为素数。输出时从整数1 开始逆时针排列。同一个环应恰好输出一次。n<=16。

    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
    

     分析:

    应用DFS和回溯法。

     

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 using namespace std;
     6 
     7 int is_prime(int x)
     8 {
     9     for(int i = 2; i*i <= x; i++)  // 注意:i<=sqrt(x)。
    10         if(x % i == 0) 
    11             return 0;
    12 
    13         return 1;
    14 }
    15 
    16 int n, A[50], isp[50], vis[50];
    17 
    18 void dfs(int cur)
    19 {
    20     if(cur == n && isp[A[0]+A[n-1]] )  //最后一个数字需要单独判断。
    21     {
    22         for(int i = 0; i < n; i++)
    23         {
    24             if(i != 0) printf(" ");  //控制每次第一个数字前不输出空格
    25             printf("%d", A[i]);
    26         }
    27         printf("
    ");
    28     }
    29     else for(int i = 2; i <= n; i++)  //放置每个数i
    30         if(!vis[i] && isp[i+A[cur-1]])  //如果i没有被用过,并且和前一个数的和为素数
    31         {
    32             A[cur] = i;
    33             vis[i] = 1;//设置使用标志
    34             dfs(cur+1);
    35             vis[i] = 0;//清除标志
    36         }
    37 }
    38 
    39 int main()
    40  {
    41     int kase = 0;
    42     while(scanf("%d", &n) == 1 && n > 0)
    43     {
    44         if(kase > 0)
    45             printf("
    ");
    46         printf("Case %d:
    ", ++kase);
    47 
    48         for(int i = 2; i <= n*2; i++)
    49             isp[i] = is_prime(i);
    50 
    51         memset(vis, 0, sizeof(vis));  //清零操作
    52         A[0] = 1;    //题目要求每组第一个数字为1
    53         dfs(1);
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    素敵な日本人 2-1
    十年目のバレンタインデー のほか
    水晶の数珠  3
    水晶の数珠  2
    STM32 USB HID BarCodeReader不兼容问题的解决
    水晶の数珠 1
    クリスマスミステリ 2
    クリスマスミステリ 1
    サファイア奇跡 3
    感悟成功
  • 原文地址:https://www.cnblogs.com/x512149882/p/4695881.html
Copyright © 2011-2022 走看看