回溯法解决素数环问题

来源:互联网 发布:如何关闭淘宝推送广告 编辑:程序博客网 时间:2024/05/21 03:17
#include <iostream>#include <math.h>using namespace std;#define N 100000int isp[2 * N];int a[N];int visited[N];int is_prime(int n){int i;int flag = 0;for (i = 2; i <= (int)sqrt(n) + 1;i++){if (n%i == 0){return 0;}}return 1;}//素数环问题void dfs(int n, int cur){if (cur == n && isp[a[cur - 1] + a[0]]){for (int i = 0; i < n; i++){cout << a[i] << " ";}cout << endl;}else for (int i = 1; i <= n; i++){if (!visited[i] && (i==1 || isp[i + a[cur - 1]])){a[cur] = i;visited[i] = 1;dfs(n, cur + 1);visited[i] = 0;}}}int main(){int n;cin >> n;for (int i = 2; i <= 2 * n; i++)isp[i] = is_prime(i);dfs(n, 0);return 0;}

0 0
原创粉丝点击