算法学习之素数环问题
来源:互联网 发布:linux tgz 解压 编辑:程序博客网 时间:2024/05/18 01:00
1-n组成的素数环,素数环就是一个数组中后一个数加前一个数必须组成素数,a[i]+a[i-1]是素数,又因为是环状所以,首末相加也要上素数即a[0]+a[n-1]是素数,因为是环状所以会有很多重复的排列,我们要除去重复的排列,就要假定所有的排列都以1打头。我们也是用回溯加剪枝来求素数环
#include <iostream>#include <cstdio>using namespace std;unsigned char visit[100];//判断i是否用过,和dfs一样char prime[] = {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-32的素数表int is_prime(int n){ return prime[n];}void prime_ring(int *arry,int cur,int n){ if(cur == n && is_prime(arry[0]+arry[n-1])) //如果排满了再判断一下末尾的和开头的是否能组成素数,因为是环状 { for(int i = 0; i < n; i++) printf("%d ",arry[i]); printf("\n"); } else { for(int i = 1; i <= n; i++) { if(!visit[i]) //如果没有访问过 { if(is_prime(i+arry[cur-1]))//判断是否能组成素数 { arry[cur] = i; visit[i] = 1; //如果组成则置1表示这个数访问过了 prime_ring(arry,cur+1,n); visit[i] = 0; //清除标记因为是要找所有的,所以要清除这个状态,以便下次用到 } } } }}int main(){ int n; scanf("%d",&n); int arry[n]; arry[0] = 1; visit[1] = 1; prime_ring(arry,1,n); printf("%d\n",count); return 0;}
0 0
- 算法学习之素数环问题
- 算法学习之素数
- 回溯算法之素数环问题
- C++搜索与回溯算法之素数环问题
- 一步一步写算法(之素数问题)
- 【经典算法问题】素数环问题
- ACM学习笔记之 数学问题----素数
- 算法练习-NOJ-1008-素数环问题
- 机试算法讲解: 第44题 深度优先搜索之素数环问题
- 【Java学习之代码学习】 Prog05_素数个数的问题
- 算法学习之旅,初级篇(13)--素数判定
- 算法学习笔记之约瑟夫环问题
- 算法学习之约瑟夫环问题
- 回溯经典之素数环问题
- 回溯法之素数环问题
- 素数环问题之解题报告
- ACM学习总结之素数与串问题
- C语言 之 素数算法
- Spring JdbcTemplate 简化 JDBC
- WebDriverUtil
- Linux下的网络编程API基础
- Qt5设置背景图片
- selenium 定位截图
- 算法学习之素数环问题
- unable to bind to locking port 7054 within 45000 ms
- selenium webdriver的各种driver
- Selenium WebDriver
- MONGODB 权限认证
- ExtJs xtype一览
- 2.Java Networking--java网络:Socket
- Javascript笔记《四》之闭包
- Selenium WebDriver get ,getScreenshotAs(OutputType.FILE);