/*
* HDU-1016
* mike-w
* 2012-9-25
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 25
#define PRIME_SIZE 64
int prime[PRIME_SIZE];
int f[MAXN], tag[MAXN];
int n;
int gen_prime(void)
{
int i, j;
prime[1]=prime[0]=1;
for(i=2; i<PRIME_SIZE; i++)
if(!prime[i])
for(j=i+i; j<PRIME_SIZE; j+=i)
prime[j]=1;
for(i=0; i<PRIME_SIZE; i++)
prime[i]=1-prime[i]; /* if i is prime then prime[i] == 1 */
return 0;
}
int disp(void)
{
int i;
for(i=1; i<=n; i++)
printf("%d%c", f[i], i==n?'\n':' ');
return 0;
}
int search(int id)
{
int i;
for(i=1; i<=n; i++)
if(!tag[i] && prime[f[id-1]+i])
{
if(id==n && prime[1+i])
{
f[id]=i;
disp();
}
else
{
tag[i]=1;
f[id]=i;
search(id+1);
tag[i]=0;
}
}
return 0;
}
int main(void)
{
int ccase=0;
gen_prime();
while(scanf("%d", &n)!=EOF)
{
memset(f, 0, sizeof(f));
memset(tag, 0, sizeof(tag));
f[1]=1;
tag[1]=1;
printf("Case %d:\n", ++ccase);
search(2);
putchar('\n');
}
return 0;
}
[HDU-1016] 无优化DFS
最新推荐文章于 2022-02-25 19:38:17 发布