zoukankan      html  css  js  c++  java
  • (深搜)HDU 1016-Prime Ring Problem

    原题链接:

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


    感悟:

    这题一看就是递归+深搜+回溯,本来的写的代码已经可以输出正确答案,但是大部分判断都是循环,怕过不了,结合其他一些博主的代码,优化了一下。特别是用flag表示是否数组这一招比较佩服,用内存换时间,本来还是列素数表,循环判断会多用很多时间。
    对于回溯了解的还不是很多,目前看来是设置一个标识,在继续搜索之前开启一下,再在返回的时候取消
    格式问题:每行后面不能留空,是每行之后空一行,不是两行间空一行。


    c++代码:

     1 #include<iostream>
     2 #include<cmath>
     3 #include<cstring>
     4 using namespace std;
     5 int prime[38]={0, 0, 1, 1, 0, 1, 0,
     6                1, 0, 0, 0, 1, 0, 1,
     7                0, 0, 0, 1, 0, 1, 0,
     8                0, 0, 1, 0, 0, 0, 0,
     9                0, 1, 0, 1, 0, 0, 0,
    10                0, 0, 1,};
    11 int line[25];
    12 int vis[25];
    13 int n;
    14 bool isSu(int a);
    15 void ss(int x);
    16 int main(){
    17     int time=0;
    18     while (cin >> n){
    19         memset(line, 0, sizeof(line));
    20         memset(vis,0,sizeof(vis));
    21         line[0] = 1;
    22         vis[1]=1;
    23         cout << "Case " << ++time << ":" << endl;
    24         if(n%2==1){
    25             cout << endl;
    26             continue;
    27 
    28         }
    29         ss(1);
    30         cout << endl;
    31     }
    32     return 0;
    33 }
    34 bool isSu(int a){
    35     if(prime[a]){
    36         return true;
    37     }
    38     return false;
    39 }
    40 void ss(int x){
    41     if (x == n&& isSu(line[x - 1] + line[0]) ){
    42         for (int i = 0; i < n; i++){
    43             cout << line[i];
    44             if(i!=n-1){
    45                 cout<<" ";
    46             }
    47         }
    48         cout << endl;
    49     }
    50     else{
    51         for (int i = 2; i <= n; i++){
    52             if (!vis[i] && isSu(i+line[x-1])){
    53                 line[x] = i;
    54                 vis[i]=1;
    55                 ss(x + 1);
    56                 vis[i]=0;
    57             }
    58         }
    59     }
    60 
    61 }
     
  • 相关阅读:
    python数据库操作读书笔记
    python玩微信跳一跳实验报告
    制作自己的第一个网页
    python文件读写笔记
    Ethernet(以太网) 详解 MAC、MII、PHY
    Ethernet(以太网) 物理介质(10Base、100Base-T、100Base-TX等)
    QByteArray 转 QBitArray
    QT 线程应用
    QT release 发布打包压缩
    Qt中利用qDebug()记日志到文件
  • 原文地址:https://www.cnblogs.com/tak-fate/p/5765976.html
Copyright © 2011-2022 走看看