素数环
题目:
从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。
——————————下面开始解析—————————
这道题
是搜索与回溯的经典题
把两个数加起来
必须是素数
但是要注意
是环形
第20个和第1个也要算
也要注意一下
——————————下面是伪代码详解——————————
我们要定义三个函数
search(int i) print() pd(int ss)
第一个是用来进行主运算
第二个是用来输出
第三个是用来判断函数
还要定义两个数组
a[],b[]
一个用来保存
一个用来查看是否使用过
下面是核心代码:
int search(int j)
{
int i;
for (i=1;i<=20;i++) //有20个数可选
{
if (加在一起是素数并且没有用过) //判断与前一个数是否构成素数及该数是否可用
{
a[j]=i;
b[i]=1;
if(可以输出) print();
else search(t+1);//递归
b[i]=0;
}
}
}
下面是大家期待已久的代码:
#include<bits/stdc++.h>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
bool b[21]={0};
int sum=0,a[21]={0};
int search(int j)
{
//请自己写
}
int print()
{
sum++;
cout<<sum<<":";
for(int j=1;j<=20;j++) cout<<a[j]<<" ";
cout<<endl;
}
bool pd(int x,int y)
{
//判断素数,请自己写
}
int main()
{
search(1);
cout<<sum<<endl; //输出总方案数
return 0;
}