HDOJ1016(搜索DFS)
2016-03-06 15:47
369 查看
Prime Ring Problem
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 38643 Accepted Submission(s): 17073
[align=left]Problem Description[/align]
A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime.
Note: the number of first circle should always be 1.
[align=left]Input[/align]
n (0 < n < 20).
[align=left]Output[/align]
The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print solutions
in lexicographical order.
You are to write a program that completes above process.
Print a blank line after each case.
[align=left]Sample Input[/align]
6 8
[align=left]Sample Output[/align]
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
此题目是dfs问题,要回回溯
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; int n; int a[21];//存放结果 int sign[21];//用来标记 int isprime[38]={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,1,0,1,0,0,0,0,0,1}; void dfs(int m) { //结束条件 if(m==n&&isprime[a[n-1]+a[0]])//因为是环,判断最后一位和第一位的和 { cout << a[0]; for(int i=1;i<n;i++) cout << " " << a[i]; cout << endl; } else { for(int i=2;i<=n;i++) { if(!sign[i]&&isprime[i+a[m-1]]) { a[m]=i; sign[i]=1;//已经用过,标记为1 dfs(m+1);//递归 sign[i]=0;//如果递归回来没有用到这个数,重新标记为可用的 } } } } int main() { int count=0; a[0]=1; while(~scanf("%d",&n)) { memset(sign,0,sizeof(sign)); count++; cout << "Case " << count <<":" << endl; dfs(1); cout << endl; } return 0; }
相关文章推荐
- 《软件工程》第一周学习进度
- js获取字符串字节数方法小结
- 几种经典的Hash算法的实现(源代码)
- location 学习与总结
- Multi-digits Recognition Using ConVNet on Mobile categories:
- Android常用系统广播
- Hadoop作业提交与停止命令
- java高级---线程、网络、文件、流、序列化等代码示例
- 分类器性能评估
- 软件测试第一次作业——描述曾经遇到的bug
- 第一周学习进度条
- php基础复习(3)文件上传于下载
- 随机生成四则运算(代码)
- Java架构
- OpenCV典型程序结构
- 剑指offer——快速排序
- 剑指offer——快速排序
- 由浅入深学习MySQL
- 2015蓝桥杯 曼哈顿距离
- 构建之法阅读计划