hdu 素数环1016

来源:互联网 发布:火花棱镜淘宝 编辑:程序博客网 时间:2024/05/01 03:19

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.

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.

Sample Input
68
 

Sample Output
Case 1:1 4 3 2 5 61 6 5 2 3 4Case 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<iostream>using namespace std;int N;int PrimeCycle[20];int visited[20];bool IsPrime(int num){    for (int i = 2; i*i <= num; i++)    {        if (num%i == 0)            return false;    }    return true;}void dfs(int current,int size){    if (size == N+1)    {        if (IsPrime(current + 1))        {            for (int i = 1; i < N; i++)            {                cout << PrimeCycle[i] << " ";            }            cout << PrimeCycle[N];            cout << endl;        }        return;    }    else    {        for (int i = 2; i <= N; i++)        {                        if (visited[i]==0 && IsPrime(current + i))            {                PrimeCycle[size] = i;                visited[i] = 1;                dfs(i,size+1);                visited[i] = 0;            }        }    }}int main(){    int Case = 1;    PrimeCycle[1] = 1;    while (cin >> N)    {        cout << "Case " << Case++ << ":" << endl;        dfs(1, 2);        cout << endl;    }            return 0;}


0 0
原创粉丝点击