UVA 524

来源:互联网 发布:香港买mac口红多少钱 编辑:程序博客网 时间:2024/05/29 16:42

题目大意:输入n,输出由1~n组成的素数环,素数环要求相邻的两个数的和为素数。环由1开始。

解题思路:dfs,当确认n个数时输出,否则去寻找下一个数,标记,取消。

ac代码:

#include <iostream>  #include <cmath>#include <cstring>using namespace std;int a[20]={1}, n, vis[20], cnt=1;bool prime(int n){int d = sqrt(n);for (int i=2; i<=d; i++)if (n % i == 0)return 0;return 1;}void dfs(int cur){if (cur == n && prime(a[n-1] + 1) )for (int i=0; i<n; i++)printf(i==n-1?"%d\n":"%d ", a[i]);elsefor (int i=2; i<=n; i++)if (!vis[i] && prime(i + a[cur-1])){vis[i] = 1;a[cur] = i;dfs(cur+1);vis[i] = 0;}}int main()  {   while (scanf("%d", &n)!=EOF && n){memset(vis, 0, sizeof(vis));if (cnt != 1)printf("\n");printf("Case %d:\n", cnt++);dfs(1);}return 0;}  
原创粉丝点击