Problem Description
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
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.
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 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
import java.util.Scanner;
import java.util.Arrays;
class Digui
{
public int n;
public int num[]=new int[21];
public int vis[]=new int[21];
public int prim[]={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,0,0,0};
public Digui(){}
public void print()
{
for(int i=0;i<n;i++)
if(i!=n-1)
System.out.print(num[i]+" ");
else System.out.println(num[i]);
}
public void init(int x)
{
Arrays.fill(vis, 0);
n=x;
vis[1]=1;
num[0]=1;
}
public void digui(int x)
{
if(x==n)
{
if(prim[1+num[n-1]]==1)
this.print();
return;
}
for(int i=1;i<=n;i++)
{
if(vis[i]==0&&prim[i+num[x-1]]==1)
{
num[x]=i;
vis[i]=1;
digui(x+1);
vis[i]=0;
}
}
}
}
public class Main{
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int cas=0;
while(in.hasNext())
{
int n=in.nextInt();
cas++;
System.out.println("Case "+cas+":");
Digui d=new Digui();
d.init(n);
d.digui(1);
System.out.println();
}
}
}