Prime Ring Problem
2017-07-10 08:57
218 查看
[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
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
#include <iostream> #include <cstdio> #include<algorithm> #include<cmath> using namespace std; int a[25]; bool vis[25]; int n; bool prime(int k){ int i; for(i =2 ; i * i < k+1 ; i++){ if(!(k%i)) return false; } return true; } void dfs(int cur)//深度搜索; { if(cur == n && prime(a[n-1]+a[0])){ for(int i = 0 ; i < n; i++) printf("%d ",a[i]); printf("\n"); } for(int j = 2 ;j <= n ; j++){ if(!vis[j]){ if(prime(a[cur-1]+j)){ vis[j] = true; a[cur] =j; dfs(cur+1); vis[j] = false; } } } } int sum = 1; int main(){ while(scanf("%d",&n)!=EOF){ a[0] = 1; printf("Case %d:\n",sum++); dfs(1); printf("\n"); } return 0; }
相关文章推荐
- hdu1016_Prime_Ring_Problem(经典dfs)
- uva 524 Prime Ring Problem
- Prime Ring Problem
- Prime Ring Problem HDU 杭电1016
- Prime Ring Problem
- HDOJ1016 Prime Ring Problem
- Prime Ring Problem
- Prime Ring Problem
- ACM dfs回溯法 Prime Ring Problem
- Prime Ring Problem(深搜入门)
- HDU 1016 Prime Ring Problem(DFS)
- hdu1016 Prime Ring Problem dfs 素数打表
- HDU:Prime Ring Problem
- HDU1016 - Prime Ring Problem (简单搜索)
- HDU1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem
- hdu hdu1016 Prime Ring Problem(dfs)
- Prime Ring Problem(搜索 深度优先)
- HDU 1016-Prime Ring Problem
- HDU 1016 Prime Ring Problem