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 the adjacent circles should is a PR Ime.
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 is to write a program, that completes above process.
Print a blank line after each case.
Sample Input68
Sample outputcase 1:1 4 3 2 5 a 6 5 2 3 4 case 2:1 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2 ********** ***********************************
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <vector>
using namespace Std;
int n;
int vis[25];
int prime[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 ans[25];
void print (int m)
{
int i;
printf ("%d", ans[1]);
for (i=2;i<=n;i++)
{
printf ("%d", ans[i]);
}
printf ("\ n");
}
void Dfs (int point)
{
if (point==n && prime[ans[point]+ans[1])
{
print (point);
}
Else
{
for (int j=2;j<=n;j++)
{
if (!vis[j]&& prime[ans[point]+j])
{
Ans[point+1]=j;
Vis[j]=1;
DFS (POINT+1);
vis[j]=0;
}
}
}
}
int main ()
{
int cas=0;
while (scanf ("%d", &n)!=eof)
{
cas++;
memset (vis,0,sizeof (VIS));
Vis[1]=1;
Ans[1]=1;
printf ("Case%d:\n", CAs);
DFS (1);
printf ("\ n");
}
}
Prime Ring problem