备战蓝桥杯---搜索(DFS基础1)

何为深搜?

即不撞南墙不罢休。

话不多说,直接看题:

备战蓝桥杯---搜索(DFS基础1)_第1张图片

我们可以把这看成深搜的模板题,下面是AC代码:

#include
using namespace std;
int a[15];//存值并输出
int vis[15];
int n=18;
void dfs(int deep){
    if(deep>n){
        for(int i=1;i<=n;i++) cout<

加点难度:

输出n个数中选m个的组合

其实,我们只要在原先基础上限定从小到大的顺序并且限定个数即可。

下面是AC代码:

法1.

#include
using namespace std;
int a[15];//存值并输出
int vis[15];
int n=5;
int m=3;
void dfs(int deep){
    if(deep>m){
        for(int i=1;i<=m;i++) cout<a[deep-1]){
                a[deep]=i;
                vis[i]=1;
                dfs(deep+1);
                a[deep]=0;
                vis[i]=0;
            }
        }
    }
}
int main(){
    dfs(1);
}

法2.

#include
using namespace std;
int a[15];//存值并输出
int vis[15];
int n=5;
int m=3;
void dfs(int deep,int last){
    if(deep>m){
        for(int i=1;i<=m;i++) cout<

你可能感兴趣的:(蓝桥杯,深度优先,算法,c++)