Prime Ring Problem
Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 17 Accepted Submission(s) : 13
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Note: the number of first circle should always be 1.
Input
Output
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
Source
素数环
#include <iostream>
#include <cstring>
using namespace std;
int n,visited[30],buffer[30],ans,flag;
bool is_prime(int x,int y)
{
int sum=x+y;
for(int i=2;i*i<=sum;i++)
{
if(sum%i==0)
return 0;
}
return 1;
}
void dfs(int cur)
{
visited[1]=1;
if(cur>n && is_prime(buffer[1],buffer[n]))
{
if(!flag)
{
printf("Case %d:\n",ans);
flag=1;
}
for(int i=1;i<n;i++)
{
printf("%d ",buffer[i]);
}
printf("%d\n",buffer[n]);
}
else
{
for(int i=2;i<=n;i++)
{
buffer[cur]=i;
if(!visited[i] && is_prime(buffer[cur-1],buffer[cur]))
{
visited[i]=1;
dfs(cur+1);
visited[i]=0;
}
}
}
}
int main()
{
ans=0;
while(scanf("%d",&n)!=EOF)
{
ans++;
flag=0;
memset(visited,0,sizeof(visited));
buffer[1]=1;
dfs(2);
printf("\n");
}
return 0;
}