自认为程序是对的,但总是 WA,纠结了一下午,最后才发现是冒号的位置打错了,哭笑不得。。。
#include <stdio.h>
#include <string.h>
int result[21], visited[21];
int p[40];
int n;
void DFS(int pre)
{
if (pre == n && p[result[n] + 1])
{
for (int i = 1; i <= n; ++i)
printf(i==1?"%d":" %d", result[i]);
printf("\n");
return;
}
for (int i = 2; i <= n; ++i)
if (p[result[pre] + i] && visited[i] == 0)
{
result[pre + 1] = i;
visited[i] = 1;
DFS(pre + 1);
visited[i] = 0;
}
}
int main()
{
int ncase = 1;
p[2] = p[3] = p[5] = p[7] = p[11] = p[13] = p[17] = p[19] = p[23] = p[29] = p[31] = p[37] = 1;
while(scanf("%d", &n) != EOF)
{
printf("Case %d:\n", ncase++);
memset(visited, 0, sizeof(visited));
result[1] = 1;
if (n % 2 == 0)
DFS(1);
printf("\n");
}
return 0;
}