二叉树dfs

在这里插入图片描述
图片很垃圾但是 也就能看看把 ~^ v ^~
#include
#include
#include
using namespace std;
const int MAXN=100;

bool isPrimeNum[MAXN];
vector ans;
bool isUsed[MAXN];
int N;

void getPrimeTable()
{
//筛选求质数-------------------------------------------打表
fill(isPrimeNum,isPrimeNum+MAXN,true);//先假设都是素数
isPrimeNum[0]=isPrimeNum[1]=false;
for(int i=2;i<MAXN;i++)
{
//2开始 2是最小的质数
if(isPrimeNum[i])
{
//把i的倍数全部设置为非素数
for(int j=2*i;j<MAXN;j+=i)
{
isPrimeNum[j]=false;
}
}
}
}
void DFS(int index)
{
int temp;
if(index>=N)--------------------------------------出口
{
temp=ans[0]+ans[index-1];//判断第一个数和最后一个数相加是否是指数
if(isPrimeNum[temp]==false) return;
for(int x: ans)
{
cout<<x;
}
cout<<endl;
return;
}
for(int i=2;i<=N;i++)
{
if(isUsed[i]) continue;
int temp=ans[index-1]+i;
if(isPrimeNum[temp]==false)-------------------------------剪枝
{
continue;//剪枝
}
ans.push_back(i);
isUsed[i]=true;
DFS(index+1);
isUsed[i]=false;---------------------------回溯
}
}
int main()
{
getPrimeTable();

N=4;
ans.push_back(1);---------先将1放入vector数组
DFS(1);
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值