zoukankan      html  css  js  c++  java
  • COGS——C66. [HAOI2004模拟] 数列问题

    http://www.cogs.pro/cogs/problem/problem.php?pid=66

    ★☆   输入文件:dfs3.in   输出文件:dfs3.out   简单对比

    时间限制:1 s   内存限制:128 MB

    问题描述
    试编程将 1 至 N ( N ≤ 15 )的自然数序列 1 , 2 , … , N 重新排列,使任意相邻两数之和为素数。例如 N=3 时有两种排列方案 123 、 321 满足要求。

    【输入格式】

    输入文件:dfs3.in

    第一行:一个整数n(1<=n<=15)

    【输出格式】

    输出文件:dfs3.out

    输出若干行,每行为一种排列方案(排列方案按字典序排列, 相邻数字之间用空格分隔) ),最后一行输出排列方案总数。

    【输入样例】

    输入文件名:dfs3.in

    3

    输出文件名:dfs3.out

    1 2 3
    3 2 1
    2

     1 #include <algorithm>
     2 #include <cstdio>
     3  
     4 using namespace std;
     5  
     6 int n,ans,a[55];
     7 int prim[55],use[55];
     8 void Prim()
     9 {
    10     for(int i=1;i<=(n<<1);i++)
    11     {
    12         prim[i]=1;
    13         for(int j=2;j*j<=i;j++)
    14             if(i%j==0)
    15             {
    16                 prim[i]=0;
    17                 break;
    18             }
    19     }
    20 }
    21 
    22 void DFS(int cnt)
    23 {
    24     if(cnt==n+1)
    25     {
    26         ans++;
    27         for(int i=1;i<=n;i++)
    28             printf("%d ",a[i]);
    29         printf("
    ");
    30         return ;
    31     }
    32     for(int i=1;i<=n;i++)
    33     {
    34         if(use[i]) continue;
    35         if(!prim[a[cnt-1]+i]&&cnt>1) continue;
    36         use[i]=1; a[cnt]=i;
    37         DFS(cnt+1);
    38         use[i]=0;
    39     }
    40 }
    41 
    42 int main()
    43 {
    44     freopen("dfs3.in","r",stdin);
    45     freopen("dfs3.out","w",stdout);
    46     scanf("%d",&n);
    47     Prim();  DFS(1);
    48     printf("%d",ans);
    49     return 0;
    50 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    修改ecshop的100种技巧
    解决ecshop后台生成菜单出现乱码的问题
    记录搜索历史ecshop
    ecshop 收货人信息电话必填改为手机必填
    ecshop 后台goods表添加字段
    想想而已。。。
    微信网页第三方登录原理
    Linux kprobe初探
    bcc-tools工具之profile
    归并排序c语言
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7189864.html
Copyright © 2011-2022 走看看