题目描述:

  输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数。输出时从整数1开始逆时针排列并且不能重复;

  例样输入:

  6

  例样输出:

  1 4 3 2 5 6

  1 6 5 2 3 4

方法1:(生成测试法,会超时)

 #include <bits/stdc++.h>
#define MAXN 100
using namespace std; int isp[MAXN], a[MAXN]; void get_prime(void) //*****素数打表
{
memset(isp, , sizeof(isp));
isp[]=isp[]=;
for(int i=; i<MAXN; i++)
{
if(isp[i])
{
for(int j=; j*i<MAXN; j++)
{
isp[i*j]=;
}
}
}
} int main(void)
{
std::ios::sync_with_stdio(false),cin.tie(),cout.tie();
get_prime();
int n;
cin >> n;
for(int i=; i<n; i++)
{
a[i]=i+;
}
do
{
int flag=;
for(int i=; i<n; i++) //****逐个尝试
{
if(!isp[a[i]+a[(i+)%n]]) //****判断合法性
{
flag=;
break;
}
}
if(flag) //****如果合法则输出序列
{
for(int i=; i<n; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
}while(next_permutation(a+, a+n)); //***1的位置不变
return ;
}

方法2:(dfs+回溯)

代码:

 #include <bits/stdc++.h>
#define MAXN 100
using namespace std; int isp[MAXN], a[MAXN], vis[MAXN], n; void get_prime(void) //****素数打表
{
memset(isp, , sizeof(isp));
isp[]=isp[]=;
for(int i=; i<MAXN; i++)
{
if(isp[i])
{
for(int j=; i*j<MAXN; i++)
{
isp[i*j]=;
}
}
}
} void dfs(int cur)
{
if(cur==n && isp[a[]+a[cur-]]) //****递归边界
{
for(int i=; i<n; i++) //***打印合法序列
cout << a[i] << " ";
cout << endl;
}
else
{
for(int i=; i<n; i++) //***逐个尝试
{
if(!vis[i]&&isp[i+a[cur-]]) //***i没用过且满足条件
{
a[cur]=i; //***存储当前序列
vis[i]=; //****标记
dfs(cur+); //***递归
vis[i]=; //***去除标记
}
}
}
} int main(void)
{
std::ios::sync_with_stdio(false),cin.tie(),cout.tie();
get_prime();
cin >> n;
memset(vis, , sizeof(vis));
dfs();
return ;
}

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

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

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

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

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

  3. 【DFS】素数环问题

    题目: 输入正整数n,对1-n进行排列,使得相邻两个数之和均为素数,输出时从整数1开始,逆时针排列.同一个环应恰好输出一次.n<=16 如输入: 6 输出: 1 4 3 2 5 6 1 6 5 ...

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

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

  5. 素数环 南阳acm488(回溯法)

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

  6. noj算法 素数环 回溯法

    描述: 把1到20这重新排列,使得排列后的序列A满足:a. 任意相邻两个数之和是素数b. 不存在满足条件a的序列B使得:A和B的前k(0 <= k <= 19)项相同且B的第k+1项比A的 ...

  7. HDU 1016 素数环(dfs + 回溯)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 一道很典型的dfs+回溯: 根据题意首先进行初始化,即第一个位置为1,然后进行dfs, ...

  8. 素数环问题[XDU1010]

    Problem 1010 - 素数环问题 Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty: Total Submit: 972  Acc ...

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

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

随机推荐

  1. IOS学习目录

    一.UI 1.基础控件 2.高级控件 二.多线程网络 1.网络请求.网络安全 2.

  2. Redis学习笔记五:独立功能之事务

    Redis 事务提供了一种将多个命令请求打包,然后一次性.按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断,会将事务中的所以命令都执行完毕才去处理其他客户端的命令请求. 事务的实现 事务 ...

  3. 外国类似stackoverflow这样的网站访问慢怎么解决-遁地龙卷风

    第二版 百度搜索蓝灯 下载桌面版 双击运行 如果打开的浏览器不是你想要的 拷贝地址栏地址给你想要的浏览器 一切就ok了!!!!! 建议不访问国外网站时,便将蓝灯关掉,否则在访问一些不开蓝灯能够正常访问 ...

  4. 如何使用java自定义注解?demo

    1.Description.java package kzfy.bk.com; import java.lang.annotation.Documented; import java.lang.ann ...

  5. [codevs1154][COJ0177][NOIP2006]能量项链

    [codevs1154][COJ0177][NOIP2006]能量项链 试题描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这 ...

  6. git 教程(2)--创建版本库

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...

  7. BZOJ 4423: [AMPPZ2013]Bytehattan

    Sol 对偶图+并查集. 思路非常好,将网格图转化成对偶图,在原图中删掉一条边,相当于在对偶图中连上一条边(其实就是网格的格点相互连边),每次加边用并查集维护就可以了. 哦对,还要注意边界就是网格外面 ...

  8. LED notification in Android device

    Code can control the LED notification in Android device, using android.app.Notification: 1 2 3 4 5 6 ...

  9. Java 数据库操作之Dao类

    package Dao; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; imp ...

  10. Exception异常

    JAVA异常指的是运行期出现的错误. 观察错误的名字和行号最重要. 运用关键字try将可能出错的语句catch出来并添加友好的话 \ 在这句话中的ae代表一个自己命名的对象. 1.要捕获首先需要知道错 ...