素数环问题
把从 1 到 20 这 20 个数摆成一个环,要求相邻的两个数的和是一个素数。
分析:用回溯算法,考察所有可能的排列。
程序如下:#include <stdio.h>
#include<iostream.h>
#include <math.h>
void search(int);
void init(); //初始化
void printresult(); //打印结果
int isprime(int); //判断该数是否是素数
void swap(int,int); //交换 a[m]和 a[i]
int a[20]; //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]);
cout<<" "<<a[i];
cout<<endl;
}
void search(int m)
{
int i;
if(m>20) //当已经搜索到叶结点时
{
if(isprime(a[0]+a[19])) //如果 a[0]+a[19]也是素数
printresult(); //输出当前解
评论4
最新资源