c++ 深搜

发布时间:2022-06-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了c++ 深搜脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

深搜

枚举二进制

#include <bits/stdc++.h>
using namespace std;
int n,a[10];
void dfs(int t){
    if(t==n){
        for(int i=0;i<n;i++) cout << a[i];
        cout << endl;
        return;	
    }
    a[t]=0;
    dfs(t+1);
    a[t]=1;
    dfs(t+1);
}                
int main(){
    cin >> n;
    dfs(0);
    return 0;
} 

输入

3

输出

000
001
010
011
100
101
110
111

枚举数的全排列

#include <bits/stdc++.h>
using namespace std;
int n,a[10],b[10];
void dfs(int t){
    if(t==n){
	for(int i=0;i<n;i++) cout << a[i];
	cout << endl;
	return;	
    }
    for(int i=1;i<=n;i++){
        if(b[i]==0){
	    a[t]=i;
	    b[i]=1;
	    dfs(t+1);
	    b[i]=0;
        }
    }
}                
int main(){
    cin >> n;
    dfs(0);
    return 0;
} 

输入

3

输出

123
132
213
231
312
321

NOIP2002 普及组 选数

#include <bits/stdc++.h>
using namespace std;
const int N=25;
int n,k,a[N],b[N],ans,s;
bool p(int x){
    if(x<2) return 0;
	for(int i=2;i*i<=x;i++){
	    if(x%i==0) return 0;
	}
    return 1;
}
void dfs(int t, int m){
    if(t==n){
	if(k==m){
	    s=0;
	    for(int i=0;i<n;i++){
		if(b[i]) s+=a[i];
	    }
	    if(p(s)) ans++;
	} 
	return;
    }
    b[t]=0;
    dfs(t+1, m);
    b[t]=1;
    dfs(t+1, m+1);
}                
int main(){
    cin >> n >> k;
    for(int i=0;i<n;i++){
    	cin >> a[i];
    }
    dfs(0, 0);
    cout << ans;
    return 0;
} 

脚本宝典总结

以上是脚本宝典为你收集整理的c++ 深搜全部内容,希望文章能够帮你解决c++ 深搜所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: