1. 素数环问题
把从 1 到 20 这 20 个数摆成一个环,要求相邻的两个数的和是一个素数。
分析:用回溯算法,考察所有可能的排列。
程序如下:
#include <stdio.h>
#include <math.h>
void search(int);
void init(); //初始化
void printresult(); //打印结果
int isprime(int); //判断该数是否是素数
void swap(int,int); //交换 a[m]和 a[i]
int a[21]; //a 数组存放素数环
int main()
{
init();
search(2); //递归搜索
}
int isprime(int num)
{
int i,k;
k=sqrt(num);
for(i=2;i<=k;i++)
if(num%i==0)
return(0);
return(1);
}
void printresult()
{
int i;
for(i=1;i<=20;i++)
printf("%3d",a[i]);
printf("");
}
void search(int m)
{
int i;
if(m>20) //当已经搜索到叶结点时
{
if(isprime(a[1]+a[20])) //如果 a[1]+a[20]也是素数
printresult(); //输出当前解
return;
}
else
{
评论1