您的位置:首页 > 其它

【HDOJ】1016 Prime Ring Problem

2014-02-26 13:11 405 查看
经典DP,写的可能麻烦了一些。

#include <stdio.h>
#define false 0
#define true  1

int is_prime[41];
int is_visit[21];
int sequence[21];

void DFS(int, int, int);

int main() {

int i, j, k;
int n;

is_prime[1] = false;
is_prime[2] = true;

for (i=2; i<=40; i++) {
k = 0;
for (j=2; j*j<=i; j++) {
if (i%j == 0) {
k = 1;
break;
}
}
if (k) {
is_prime[i] = false;
} else {
is_prime[i] = true;
}

}

k = 0;

while (scanf("%d", &n) != EOF) {
printf("Case %d:\n", ++k);

DFS(1, 1, n);

printf("\n");
}

return 0;
}

void DFS(int num, int order, int end) {
int i;

is_visit[num] = true;
sequence[order] = num;

if (order == end) {
if (is_prime[num+1]) {
sequence[order] = num;
for (i=1; i<=end; i++) {
if (i != end)
printf("%d ", sequence[i]);
else
printf("%d\n", sequence[i]);
}
}
} else {
for (i=1; i<=end; i++) {
if (is_visit[i] == false && is_prime[i+num]) {
DFS(i, order+1, end);
is_visit[i] = false;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: