11. 巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之
和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。
#include "stdio.h"
#include <iostream>
#include <vector>
using namespace std;
static int used[21],link[21];
bool isSushu(int num)
{
for (int i = 2; i < num/2 + 1; i++)
{
if (!(num%i))
{
return false;
}
}
return true;
};
void iteration(int node)
{
int i;
if ((node == 21) && isSushu(link[20] + link[1]))
{
for (i = 1; i < 21; i++)
printf("%4d", link[i]);
putchar(10);
}
for (int i = 1; i <= 20; i++)
{
if (!used[i])
{
link[node] = i;
used[i] = 1;
if (isSushu(link[node] + link[node - 1]))
iteration(node + 1);
used[i] = 0;
}
}
};
void main()
{
iteration(1);
system("pause");
}