HDOJ  1016   Prime Ring Problem
2015-12-18 18:07
531 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1016
题解:
素数环:由1到n个数构成一个环,其中环内任意2个相邻的数字之和是素数。
比较经典的搜索题,由于n<20,可以先预处理出前40个自然数中的素数,然后深搜某个位置的未被访问过的数字和它相邻位置的数字之和是否为素数,搜索退出的条件为最后一个位置的数字circle
+1是否为素数。一次搜索完成后,要回溯,否则只会输出一组解。
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 41;
bool visit[MAXN];
int n,p[MAXN],circle[MAXN];
void prime(){
int
i,j;
memset(p,true,sizeof(p));
for(i=2;i<MAXN;i++)
for(j=2;i*j<MAXN;j++)
p[i*j]=false;
}
void dfs(int c,int cnt){
if(cnt==n
&& p[circle[1]+circle
]){
for(int i=1;i<n;i++)
cout<<circle[i]<<'
';
cout<<circle
<<endl;
}
for(int
i=1;i<MAXN;i++)
if(p[i+c] && i<=n
&& !visit[i]){
circle[cnt+1]=i;
visit[i]=true;
dfs(i,cnt+1);
visit[i]=false;
}
}
int main(){
int
c=1;
prime();
while(cin>>n){
memset(visit,false,sizeof(visit));
cout<<"Case
"<<c++<<":"<<endl;
visit[1]=true,circle[1]=1;
dfs(1,1);
cout<<endl;
}
return
0;
}
题解:
素数环:由1到n个数构成一个环,其中环内任意2个相邻的数字之和是素数。
比较经典的搜索题,由于n<20,可以先预处理出前40个自然数中的素数,然后深搜某个位置的未被访问过的数字和它相邻位置的数字之和是否为素数,搜索退出的条件为最后一个位置的数字circle
+1是否为素数。一次搜索完成后,要回溯,否则只会输出一组解。
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 41;
bool visit[MAXN];
int n,p[MAXN],circle[MAXN];
void prime(){
int
i,j;
memset(p,true,sizeof(p));
for(i=2;i<MAXN;i++)
for(j=2;i*j<MAXN;j++)
p[i*j]=false;
}
void dfs(int c,int cnt){
if(cnt==n
&& p[circle[1]+circle
]){
for(int i=1;i<n;i++)
cout<<circle[i]<<'
';
cout<<circle
<<endl;
}
for(int
i=1;i<MAXN;i++)
if(p[i+c] && i<=n
&& !visit[i]){
circle[cnt+1]=i;
visit[i]=true;
dfs(i,cnt+1);
visit[i]=false;
}
}
int main(){
int
c=1;
prime();
while(cin>>n){
memset(visit,false,sizeof(visit));
cout<<"Case
"<<c++<<":"<<endl;
visit[1]=true,circle[1]=1;
dfs(1,1);
cout<<endl;
}
return
0;
}
相关文章推荐
- HDOJ&nbsp;&nbsp;2181&nbsp;&nbsp;&nbsp;哈密顿绕行世界问题
- HDOJ&nbsp;&nbsp;1181&nbsp;&nbsp;&nbsp;&nbsp;变形课
- 韦东山第三期视频监控wpa_supplicant编译出错问题
- Android图片裁剪开源组件 实现了图片翻转,裁剪
- 使用Android Studio新建项目
- 关于android进程间通信(handler、messenger、AIDL)
- package.json依赖管理dependencies中 ^ 和 ~ 的区别
- HDOJ&nbsp;1350&nbsp;&nbsp;&nbsp;&nbsp;Robot&nbsp;Motion
- HDOJ&nbsp;&nbsp;1722&nbsp;&nbsp;&nbsp;&nbsp;Cake
- HDOJ&nbsp;&nbsp;1271&nbsp;&nbsp;&nbsp;整数对
- HDOJ&nbsp;&nbsp;&nbsp;1021&nbsp;&nbsp;&nbsp;&nbsp;Fibonacci&nbsp;Again
- Fibonacci数列
- HDOJ&nbsp;&nbsp;1010&nbsp;&nbsp;&nbsp;Tempter&nbsp;of&nbsp;the&nbsp;Bone
- HDOJ&nbsp;&nbsp;1005&nbsp;&nbsp;&nbsp;Number&nbsp;Sequence
- HDOJ&nbsp;&nbsp;1040&nbsp;&nbsp;As&nbsp;Easy&nbsp;As&nbsp;A+B
- 欧拉φ函数
- C语言中的qsort函数
- C++中的sort函数
- HDOJ&nbsp;2673&nbsp;sh&#462;崽&nbsp;OrOrOrOrz
- HDOJ&nbsp;2037&nbsp;今年暑假不AC