深度优先搜索,素数判定
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n,k;
int a[21];
int ans;
int tot;
bool pd(){
for(int i=2;i<=sqrt(ans);++i){
if(ans%i==0)return 0; //不是质数
}
return 1; //是质数
}
void search(int cs,int t){
for(int i=t+1;i<=n;++i){
ans+=a[i];
if(cs==k){
if(pd())tot++;
}
else{
search(cs+1,i);
}
//cout<<"层数:"<<cs<<" "<<"i="<<i<<" "<<"ans:"<<ans<<" tot:"<<tot<<'\n';
ans-=a[i]; //回溯
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;++i){
cin>>a[i];
}
search(1,0);
cout<<tot;
}

本文介绍了一个使用深度优先搜索算法结合素数判定的应用案例。通过递归地构造数字组合,判断组合是否为素数,并统计符合条件的素数个数。此程序采用C++编写,展示了深度优先搜索的基本思想及其在实际问题中的应用。

978

被折叠的 条评论
为什么被折叠?



