• dfs的几个基础示例 acwin 91~94


     11~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。
     2 
     3 输入格式
     4 输入一个整数n。
     5 
     6 输出格式
     7 每行输出一种方案。
     8 
     9 同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。
    10 
    11 对于没有选任何数的方案,输出空行。
    12 
    13 本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。
    14 
    15 数据范围
    16 1≤n≤15
    17 输入样例:
    18 3
    19 输出样例:
    20 
    21 3
    22 2
    23 2 3
    24 1
    25 1 3
    26 1 2
    27 1 2 3
     1 #include <iostream>
     2 #include <vector>
     3 
     4 using namespace std;
     5 
     6 vector<int> result;
     7 vector<int> v;
     8 int n;
     9 
    10 void dfs(int i)
    11 {
    12    if(i == n){
    13        for(auto& e:result){
    14            cout << e << ' ';
    15        }
    16        cout <<endl;
    17        return;
    18    } 
    19    
    20    result.push_back(v[i]);
    21    dfs(i+1);
    22     result.pop_back();
    23    
    24    dfs(i+1);
    25    
    26 }
    27 
    28 int main()
    29 {
    30     
    31     cin >> n;
    32     for(int i= 1;i <=n;i++){
    33         v.push_back(i);
    34     }
    35     
    36     dfs(0);
    37     
    38     return 0;    
    39 }
    View Code
    1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。
    
    输入格式
    两个整数 n,m ,在同一行用空格隔开。
    
    输出格式
    按照从小到大的顺序输出所有方案,每行1个。
    
    首先,同一行内的数升序排列,相邻两个数用一个空格隔开。
    
    其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面)。
    
    数据范围
    n>0 ,
    0≤m≤n ,
    n+(n−m)≤25
    输入样例:
    5 3
    输出样例:
    1 2 3 
    1 2 4 
    1 2 5 
    1 3 4 
    1 3 5 
    1 4 5 
    2 3 4 
    2 3 5 
    2 4 5 
    3 4 5 
     1 #include <iostream>
     2 #include <vector>
     3 
     4 
     5 using namespace std;
     6 
     7 int n ,m;
     8 vector<int> result;
     9 vector<int> v;
    10 
    11 void dfs(int i){
    12     if(result.size() == m){
    13           for(auto& e:result){
    14            cout << e << ' ';
    15        }
    16        cout <<endl;
    17        return;
    18     }else if(i == n){
    19         return;
    20     }
    21     
    22     result.push_back(v[i]);
    23     dfs(i+1);
    24     result.pop_back();
    25    
    26     dfs(i+1);
    27 }
    28 
    29 
    30 int main()
    31 {
    32     cin >> n >> m;
    33     for(int i = 1;i <= n;i++){
    34         v.push_back(i);
    35     }
    36     
    37     dfs(0);
    38 }
    View Code
    1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。
    
    输入格式
    一个整数n。
    
    输出格式
    按照从小到大的顺序输出所有方案,每行1个。
    
    首先,同一行相邻两个数用一个空格隔开。
    
    其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。
    
    数据范围
    1≤n≤9
    输入样例:
    3
    输出样例:
    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1
     1 #include <iostream>
     2 #include <vector>
     3 
     4 using namespace std;
     5 
     6 vector<int> v;
     7 
     8 int n ;
     9 
    10 void dfs(int i, vector<int>& result){
    11     if(i== n){
    12         for(auto& e:result){
    13            cout << e << ' ';
    14        }
    15        cout <<endl;
    16        return;
    17     }
    18    
    19    for(int j = 0; j < v.size();j++){
    20        if(v[j] != 0){
    21            result[i] = v[j];
    22            v[j] = 0;
    23            dfs(i+1,result);
    24            v[j] =  result[i] ;
    25        }
    26    }
    27 }
    28 
    29 int main()
    30 {
    31     cin >> n;
    32     for(int i= 1; i<=n;i++){
    33         v.push_back(i);
    34     }
    35     vector<int> result(n,0);
    36     
    37     dfs(0,result);
    38     
    39     return 0;
    40 }
    View Code
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    网站备份list
    vnc checklist
    appnode iptables 规则后面覆盖前面的
    Appnode + Discuz checklist
    解决WORD文档无法显示链接的图像问题
    应用容器Application container
    要研究的内容
    转 Flex MXML编译成AS类
    Flex文件结构
    int a
  • 原文地址:https://www.cnblogs.com/itdef/p/10803602.html
Copyright © 2020-2023  润新知