巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之
和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。求思路,我看了一个钟头的代码,还是看不懂....
//
#include "stdio.h"
#include "math.h"
static used[21], link[21];
bool isprime(int a)//判断是不是素数
{for(int i = 2; i <= sqrt(a); i++)
{if(!(a%i))
return false;}
return true;}
void trace(int node)//好奇怪,我在vc里单步运行后,当node=20时,执行trace(node+1),node的值就变成19了......然后18....17.....
{
int i;if((node == 21) && isprime(link[20] + link[1]))
{
for(i = 1; i
printf("%4d", link[i]);
putchar(10);}
for(i = 1; i <= 20; i++)
{
if(!used[i])
{
link[node] = i;
used[i] = 1;
if(isprime(link[node]+link[node-1]))
trace(node+1);//
used[i] = 0;}}}
void main()
{trace(1);}