回溯法-素数环
2016-03-20 10:43
381 查看
输入正整数n,把整数1,2,3,……,n组成一个环,使得相邻的两个整数之和均为素数。
采用深度优先遍历解答树的方法。这里用RINGLENGTH代替了n,由于要求每个数只能使用一次,需要有个vis[]来记录是否被使用过。
采用深度优先遍历解答树的方法。这里用RINGLENGTH代替了n,由于要求每个数只能使用一次,需要有个vis[]来记录是否被使用过。
#include<stdio.h> #include<math.h> #define RINGLENGTH 10 int isp[100]; int a[12]; int vis[12]; bool isPrime(int num) { int s = (int)sqrt(num); //注意类型转换时精度的损失 int i; for(i = 2; i <= s; i++) if(!(num % i)) break; return (i > s ? 1 : 0); } void initPrime() { for(int i = 2; i < 100; i++) isp[i] = isPrime(i); } void dfs(int cur) { int i, j; if( cur == RINGLENGTH && isp[a[RINGLENGTH - 1] + a[0]]) { for(i = 0; i < RINGLENGTH; i++) printf("%d ", a[i]); printf("\n"); } else for(j = 1; j <= RINGLENGTH; j++) { if(!vis[j] && cur == 0) { vis[j] = 1; a[0] = j; dfs(cur + 1); vis[j] = 0; //注意标志位复原 } else if(!vis[j] && isp[a[cur - 1] + j]) { vis[j] = 1; a[cur] = j; dfs(cur + 1); vis[j] = 0; //注意标志位复原 } } } int main() { int cur = 0; initPrime(); dfs(cur); return 0; }
相关文章推荐
- Gym 100015B Ball Painting
- 运用 jsoup 对 HTML 文档进行解析和操作
- 第三周项目5:穷举法解决组合问题---委派任务问题
- CString转换为const char*
- 自动文本摘要的介绍
- Opengl 单双缓冲区区别
- 单例模式最佳写法
- 环信iOS SKD 3.1.0集成总结
- Eclipse中用Tomcat发布的Web项目存放路径
- OpenGL两种投影方式
- 画板 ios
- GitHub上传本地项目 之 Github设置SSH keys (1)
- 7. Reverse Integer
- 字节序判断
- AsyncHttpClicent框架
- 平衡二叉树
- jsoup 和nekohtml,htmlparser解析html
- 关于无线网卡速度科普
- PHP基础
- 三周 小结(2) 个人技术和流程