题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016
题目大意:素数环。
分析:DFS + check,注意一下第一个数和最后一个数的和是否为素数就好了
ac代码
#include<cstdio>
#include<cstring>
#define M 25
int ring[M];
int flag[M];
int n;
bool judge(int x)
{
if(x == 2)return true;
for(int i = 2; i * i <= x; i++)
if(x % i == 0)return false;
return true;
}
void dfs(int l)
{
if(l == n && judge(ring[1] + ring[n]))
{
printf("1");
for(int i = 2; i <= n; i++)
printf(" %d", ring[i]);
printf("\n");
return;
}
else
{
for(int i = 2; i <= n; i++)
{
if(!flag[i] && judge(ring[l] + i))
{
flag[i] = 1;
ring[l + 1] = i;
dfs(l + 1);
flag[i] = 0;
}
}
}
}
int main()
{
int t = 1;
while(scanf("%d", &n) != EOF)
{
memset(ring, 0, sizeof(ring));
memset(flag, 0, sizeof(flag));
printf("Case %d:\n", t++);
ring[1] = 1;
flag[1] = 1;
if(n % 2)continue;
else dfs(1);
printf("\n");
}
return 0;
}