您的位置:首页 > 其它

题目1459:Prime ring problem(素数环问题)

2014-06-16 19:55 274 查看
题目1459:Prime ring problem

时间限制:2 秒

内存限制:128 兆

特殊判题:否

提交:823

解决:332

题目描述:

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.



输入:

n (1 < n < 17).

输出:

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.

样例输入:
6
8


样例输出:
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


提示:

用printf打印输出。

#include<stdio.h>
bool hash[22];
int prime[] = {2,3,5,7,11,13,17,19,23,29,31,37,41};
int ans[22];
int n = 0;

bool judge(int num){
for (int i = 0; i < 13; i++) {
if(num == prime[i]) return true;
}
return false;
}
void check(){
if(judge(ans
+ ans[1]) == false)return;

for (int i = 1; i <= n; i++) {
if(i!=1) printf(" ");
printf("%d",ans[i]);

}
printf("\n");
}
void DFS(int num){
if(num > 1){
if(judge(ans[num] + ans[num-1]) == false) return;
}
if(num == n) {
check();
return;
}

for (int i = 2; i <= n; i++) {
if(hash[i] == false){
hash[i] = true;
ans[num+1] = i;
DFS(num+1);
hash[i] = false;
}
}

}
int main() {

int cas = 0;
while( scanf("%d",&n) != EOF ){

cas ++;
for (int i = 0; i < 22; i++) {
hash[i] = false;
}

ans[1] = 1;
hash[1] = true;
printf("Case %d:\n",cas);
DFS(1);

printf("\n");
}
return 0;
}

/**************************************************************
Problem: 1459
User: yihukurama
Language: C++
Result: Accepted
Time:610 ms
Memory:1020 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: