Prime Ring Problem

xiaoxiao2021-02-27  206

Problem Description 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.   Input n (0 < n < 20).   Output 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.   Sample Input 6 8   Sample Output 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; }
转载请注明原文地址: https://www.6miu.com/read-11135.html

最新回复(0)