Problem DescriptionA 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.
Inputn (0 < n < 20).
OutputThe 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 Input6 8
Sample OutputCase 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>using namespace std;int P[38]={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,0,0,0,1};int visited[21];int a[21];int n;void DFS(int count){int i;if(count==n&&P[a[count-1]+1]==1){cout<<a[0];for( i=1;i<n;i++){cout<<' '<<a[i];}cout<<endl;}else{for(i=2;i<=n;i++){if(!visited[i]&&P[a[count-1]+i]==1){a[count]=i;visited[i]=1;DFS(count+1);visited[i]=0;}}}}int main(){a[0]=1;int A=1;while(cin>>n){cout<<"Case "<<A++<<':'<<endl;DFS(1);cout<<endl;}return 0;}