zoukankan      html  css  js  c++  java
  • hdu 1016 Prime Ring Problem (dfs)

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

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 bool isp[40], vis[20];                        //isp[]素数标记数组
     5 int n, a[20];
     6 bool is_prime(int n)                          //n >= 2
     7 {
     8     bool flag = 1;
     9     for (int i = 2; i * i <= n; ++i)
    10         if (n % i == 0)
    11         {
    12             flag = 0;
    13             break;
    14         }
    15     return flag;
    16 }
    17 void dfs(int cur)                            //调用dfs(1)
    18 {
    19     if (cur == n && isp[a[0]+a[n-1]])        //递归边界
    20     {
    21         for (int i = 0; i < n - 1; ++i)
    22             printf("%d ", a[i]);
    23         printf("%d\n", a[n-1]);
    24     }
    25     else
    26     {
    27         for (int i = 2; i <= n; ++i)        //尝试放置剩余的数
    28             if (!vis[i] && isp[i+a[cur-1]])
    29             {
    30                 a[cur] = i;
    31                 vis[i] = 1;                //标记
    32                 dfs(cur + 1);
    33                 vis[i] = 0;                //清除标记
    34             }
    35     }
    36 }
    37 int main()
    38 {
    39     for (int i = 2; i <= 40; ++i)            //生成素数标记
    40         isp[i] = is_prime(i);
    41     int cnt = 0;
    42     while (scanf("%d", &n) != EOF)
    43     {
    44         ++cnt;
    45         memset(vis, 0, sizeof(vis));
    46         for (int i = 0; i < n; ++i)
    47             a[i] = i + 1;
    48         printf("Case %d:\n", cnt);
    49         dfs(1);
    50         printf("\n");
    51     }
    52     return 0;
    53 }
  • 相关阅读:
    高一下期末考试划水记
    BZOJ 1053
    积性函数与狄利克雷卷积(未完待更)
    Contest Hunter 3101
    POJ2689
    3.17爆零赛
    全概率公式
    矩阵快速幂
    模板练习
    _rqy's Code Style for OI
  • 原文地址:https://www.cnblogs.com/PegasusWang/p/3063666.html
Copyright © 2011-2022 走看看