嗯...

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016

一道很典型的dfs+回溯:

根据题意首先进行初始化,即第一个位置为1,然后进行dfs,枚举2~n之间的每一个数,如果这个数没被使用并且它和环中上一个数形成素数环,那么就把它加入环中,打上标记,然后继续dfs,最后回溯。当环上的个数正好等于n并且第一个数和最后一个数也能组成素数,则输出,输出时注意格式,很严格!

dfs这里还有一个剪枝:

只有n为偶数时才可能形成素数环!因为当n为奇数时,在1~n中奇数的个数比偶数多一,所以一定会形成两个奇数相邻,则构不成素数....

AC代码:

 #include<cstdio>
#include<cstring>
#include<iostream> using namespace std; int n, ring[], vis[]; inline bool is_prime(int x){
for(int i = ; i * i <= x; i++){
if(x % i == ) return ;
}
return ;
} inline void dfs(int x){
if(x == n && is_prime(ring[x] + ring[])){
for(int i = ; i < n; i++)
printf("%d ", ring[i]);//输出格式要严格
printf("%d\n", ring[n]);
return;
}
for(int i = ; i <= n; i++){
if(!vis[i] && is_prime(ring[x] + i)){
vis[i] = ;
ring[x + ] = i;
dfs(x + );
vis[i] = ;
}
}
} int main(){
int k = ;
while(~scanf("%d", &n)){
memset(ring, , sizeof(ring));
memset(vis, , sizeof(vis));
ring[] = ;
printf("Case %d:\n", k);
k++;
if(n % == && n > ) dfs();
printf("\n");
}
return ;
}

AC代码

HDU 1016 素数环(dfs + 回溯)的更多相关文章

  1. HDU 1016(素数环 深搜)

    题意是说对一个长度为 n 的数环进行排列,使得相邻两数的和为素数,按从小到大的顺序依次输出. 因为是环,所以总能调整成以 1 为序列首输出.用深度优先搜索的方法即可.在判断素数时由于 n 小于 20, ...

  2. HDU 1016 素数环问题

    题目大意: 给定1-n这n个数,组成以1开头的素数环,保证相邻两个数相加均为素数 题目用dfs搜索再回溯,这样碰到不成立的立刻退出递归,就减少了很多步骤,不然暴力来就是n!次复杂度,肯定是超时的 每次 ...

  3. [HDU 1016]--Prime Ring Problem(回溯)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...

  4. HDU 1016 Prime Ring Problem (回溯法)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  5. HDU 1016 Prime Ring Problem(经典DFS+回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. Hdu 1016 Prime Ring Problem (素数环经典dfs)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. HDU 1016 Prime Ring Problem(素数环问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...

  8. UVA 524 素数环 【dfs/回溯法】

    Description   A ring is composed of n (even number) circles as shown in diagram. Put natural numbers ...

  9. nyist 488 素数环(搜索+回溯)

     素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 有一个整数n,把从1到n的数字无反复的排列成环,且使每相邻两个数(包含首尾)的和都为素数,称为素数环. ...

随机推荐

  1. LitElement(一)概述

    1.一些感悟 自从踏入编程领域开始,从html,css,JavaScript,jQuery,bootstrap开始接触前端,经常用NodeJS,ejs等模板语言来写个简单的页面,感觉蛮简单的,也不怎么 ...

  2. Spring MVC 中使用properties文件

    首先要搭建Spring mvc的环境,然后开始properties文件里的配置: 第一步:在springcontext中注入properties,具体路径自己调整 <bean id=" ...

  3. C++-POJ1021-2D-Nim[hash]

    哈希,对于每个点哈希一次 哈希的方式:该点到联通分量边界(上下左右)的距离和 然后分别对两个图的n个点按hash值排序,判断是否相等即可 #include <set> #include & ...

  4. MySQL对大小写敏感吗

    见字如面,见标题知内容.你有遇到过因为MYSQL对大小写敏感而被坑的体验吗? 之前看过阿里巴巴Java开发手册,在MySql建表规约里有看到: [强制]表名.字段名必须使用小写字母或数字 , 禁止出现 ...

  5. js加密(五)产品目录

    1.  url:http://www.300600900.cn/ 2. target: 3. 简单分析 偶然发现,这个网站的加密,和landChina加密一模一样,js函数的名字都一样...所以,只贴 ...

  6. Qt入门-表格类QTableWidget

    原文 :http://blog.csdn.net/xgbing/article/details/7774737 表格是GUI中常用的控件,在Qt中,常用的表格类是QTableWidget. 示例: Q ...

  7. 【安卓逆向】ARM常见汇编指令总结

    跳转指令 B 无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 BLX 带链接和状态的无条件跳转 存储器与寄存器交互数据指令(核心) 存储器:主存和内存 寄存器中放的数据:可以是字符 ...

  8. 1012 The Best Rank

    1012 The Best Rank 1. 注意点 一名同学同样排名下的科目优先级问题 不同同学分数相同时排名相同,注意 排名不是 1 1 2 3 4 这种, 而是 1 1 3 4 5 注意到有些同学 ...

  9. 二次封装 Reponse,视图家族

    复习 """ 1.整体修改与局部修改 # 序列化 ser_obj = ModelSerializer(model_obj) # 反序列化,save() => cre ...

  10. JQuery选择器(转载)

    原文:https://blog.csdn.net/colorapp/article/details/44279645 一. jQuery选择器是什么1. CSS选择器要是某个样式应用于特定的HTML元 ...