hdu 1016 Prime Ring Problem (dfs)
2016-07-24 19:38
513 查看
题意:输入一个n(n<20),输出所有的素数环(相邻两个相加等于素数)。
Note: the number of first circle should always be 1.
![](http://acm.hdu.edu.cn/data/images/1016-1.gif)
Sample Input
6
8
Sample Output
Case 1:
1 4 3 2 5 6
1 6 5 2 3 4
Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
Note: the number of first circle should always be 1.
![](http://acm.hdu.edu.cn/data/images/1016-1.gif)
Sample Input
6
8
Sample Output
Case 1:
1 4 3 2 5 6
1 6 5 2 3 4
Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int prime[41]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0},n; int vis[25],a[25]; void dfs(int x) {int i; if(x==n&&prime[a[x-1]+a[0]]==1) { for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } else { for(i=2;i<=n;i++) { if(!vis[i]) { if(prime[a[x-1]+i]) { a[x]=i; vis[i]=1; x++; dfs(x); vis[i]=0; x--; } } } } } int main() { int cas=0; while(~scanf("%d",&n)) { cas++; printf("Case %d:\n",cas); memset(a,0,sizeof(a)); memset(vis,0,sizeof(vis)); a[0]=1; dfs(1); printf("\n"); } return 0; }
相关文章推荐
- 选择中医 - 醒脑(养生、穴位)
- 选择中医 - 吃什么健康
- 选择中医 - 虚寒性体质的人吃什么好(萝卜、生姜、地瓜、大蒜)
- 设置一个DIV块固定在屏幕中央(两种方法)
- iOS经典面试题总结--内存管理
- 【CV论文阅读】 Fast RCNN + SGD笔记
- linux下信号量及其SEM_UNDO标志
- Linux下 配置mysql Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 选择中医 - 感冒
- eclipse最有用快捷键整理
- POJ 2912 Rochambeau(带权并查集)
- noip2007 树网的核
- 选择中医 - 感冒
- 乱码问题
- 数组指针、函数指针
- 关键字volatile有什么含意 并给出三个不同的例子
- 1 准备学习redis
- mybatis.generator.configurationFile
- 彻底卸载sublime txt
- 【杭电1212】大数除法