zoukankan      html  css  js  c++  java
  • HDU1016 Prime Ring Problem

    解题思路:回溯,按顺序搜,自然回搜出对应的字典序从小到大。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 const int maxn = 24;
     6 int vis[maxn], path[maxn], n, kase = 1;
     7 //把两数相加可能取到的素数直接放到数组中
     8 int prime[12] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};
     9 
    10 int IsPrime(int k) //判断相加结果是否为素数
    11 {
    12     for(int i = 0; i < 12; i++) //扫描一遍,是素数直接返回1
    13     if(k == prime[i]) return 1;
    14 
    15     return 0; //不是素数
    16 }
    17 
    18 void DFS(int num)
    19 {
    20     if(num == n && IsPrime(path[num] + 1)) //如果已经走到最后一步,并且符合条件
    21     {
    22         for(int i = 1; i <= n-1; i++) printf("%d ", path[i]);
    23         printf("%d
    ", path[n]);
    24         return ; //打印完直接输出
    25     }
    26 
    27     for(int i = 2; i <= n; i++)
    28     {
    29         //没访问过并且相加为素数
    30         if(!vis[i] && IsPrime(path[num]+i))
    31         {
    32             vis[i] = 1; //标记为已经走过
    33             path[++num] = i; //将路径存储
    34             DFS(num);   //搜索
    35             vis[i] = 0; //回溯
    36             num --; //这步好好体会
    37         }
    38     }
    39     return ;
    40 }
    41 
    42 int main()
    43 {
    44     while(~scanf("%d", &n))
    45     {
    46         memset(vis, 0, sizeof(vis));
    47         path[1] = 1, vis[1] = 1; //第一步始终是1
    48         printf("Case %d:
    ", kase ++);
    49         DFS(1);
    50         printf("
    "); //不要忘了
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    Hexo+Github搭建个人博客手记
    如何在Github上部署Hexo个人博客
    测试计划与测试方案的区别
    软件测试流程
    Python笔记-List和Tuple类型
    键盘无响应-如何修复键盘注册表
    正向代理与反向代理-小故事
    解决git连接github超时问题
    如何防范短信接口被恶意调用(被刷)
    接口测试基础篇
  • 原文地址:https://www.cnblogs.com/loveprincess/p/4856946.html
Copyright © 2011-2022 走看看