zoukankan      html  css  js  c++  java
  • 递归实现排列型枚举

     

     方法一:c++自带的next_permutation函数

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int a[15];
     4 int main() {
     5     int n;
     6     cin >> n;
     7     for (int i = 0; i < n; i++) {
     8         a[i] = i + 1;
     9     }
    10     sort(a, a + n);
    11     do {
    12         for (int i = 0; i < n; i++) {
    13             cout << a[i] << " ";
    14         }
    15         cout << endl;
    16     } while(next_permutation(a, a + n));
    17     return 0;
    18 }

    方法二:dfs。搜索顺序:从前往后遍历每个位置,判断这个位置放哪个数

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N = 15;
     4 int way[N]; //存储每种方案
     5 bool used[N]; //判断每个数有没有被用过,true表示用过,false没用过
     6 int n;
     7 void dfs(int u) {
     8     if (u == n + 1) {
     9         for (int i = 1; i <= n; i++) { //打印方案
    10             cout << way[i] << " ";
    11         }
    12         cout << endl;
    13         return;
    14     }
    15     //依次枚举每个分支,即当前位置可以放哪些数
    16      for (int i = 1; i <= n; i++) { //从小到大
    17          if (!used[i]) { //找一个没用过的数
    18             way[u] = i; //放在u这个位置
    19             used[i] = true; //i这个数用过了
    20             dfs(u + 1); //搜索下一层
    21             way[u] = 0; //回溯回复现场
    22             used[i] = false;
    23          }
    24      }
    25 }
    26 int main() {
    27     cin >> n;
    28     dfs(1); //从第一位开始
    29     return 0;
    30 }
  • 相关阅读:
    django继承User表导致的问题
    Sublime Text 3 鼠标右键快捷选项 简单且高效
    php所有版本
    windows 安装redis
    php玩弄redis基本操作
    PHP 实现文件下载
    PHP 获取客户端的真实IP
    根据标签内个数,显示隐藏《加载更多》
    ubuntu 安装nginx+php+mysql+phpadmin环境
    面试总结
  • 原文地址:https://www.cnblogs.com/fx1998/p/13901431.html
Copyright © 2011-2022 走看看