这道题不知从何入手哦?(c/c++)

来源:百度知道 编辑:UC知道 时间:2024/06/04 08:55:48
将1,2,3,。。。,20这20个连续的自然数排成一圈,使任意两个相邻的自然数之和均为素数。

请教高手将一下思路啊,给个代码也行。

//典型的深度搜索算法,后面代码里有注释
/********************************************/
#include<stdio.h>
int A[20];//全局数组存储结果
int change;//记录上一次交换的数组元素下标
int IsP(int m)//判断m是否为素数
{
int i;
for(i=2;i<=m/2;i++)
if(m%i==0)
return 0;
return 1;
}
void DFS(int k)//深度搜索
{
int prek=k-1;//k的前一项
int i,j;
int tmp;
if(prek>=0)//没到数组首项
for(i=0;i<k;i++)
{
if(IsP(A[k]+A[i]))//如果找到满足和为素数的i
{
tmp=A[i];
A[i]=A[prek];
A[prek]=tmp;//交换
change=i;//记录所交换的以便用完恢复
DFS(prek);//递归下一项
}
}
else//到了数组首项
if(IsP(A[k]+A[19]))//满足条件,就输出结果
{
for(j=0;j<20;j++)
printf("%d ",A[j]);
printf("\n");
printf("已经找到一组结果,是否继续显示下一组结果?\n");
printf("下一组结果请按1,停止显示请按2,最后回车\n");
scanf("%d",&tmp);//接受下一步动作的指令
if(tmp==1)