zoukankan      html  css  js  c++  java
  • Full permutation

    Full Permutation


    全排列问题, 将1~n这n个整数按字典序排放

    • 划分:

      • 输出1开头的全排列
      • 输出2开头的全排列
      • ......
      • 输出n开头的全排列
    • 递归边界:当下标1 ~ n 位都已经填好了,此时表示排列已经生成,可以输出。

    • 递归子式:即上述划分

    //以3为例的全排列
    #include <cstdio>
    
    const int maxn = 11;
    int n, p[maxn], hashTable[maxn] = {false};
    //p为当前排列,hashTable记录x是否在p中
    void generateP(int index) {
        if (index == n + 1) {   //递归边界
            for (int i = 1; i <= n; i++) {
                printf("%d", p[i]);
            }
            printf("
    ");
            return;
        }
        for (int x = 1; x <= n; x++) {
            if (hashTable[x] == false) {
                p[index] = x;
                hashTable[x] = true;  //记录x已在p中
                generateP(index + 1); //处理下一位
                hashTable[x] = false;   //已处理完p[index]为x的子问题,还原状态
            }
        }
    }
    
    int main() {
        n = 3;
        generateP(1);
        return 0;
    }
    
  • 相关阅读:
    梯度消失和梯度爆炸
    BN的作用与使用过程
    百面机器学习笔记(二)
    正则表达式
    CSS Sprite
    事件绑定
    拖拽
    oncontextmenu
    鼠标跟随
    鼠标事件
  • 原文地址:https://www.cnblogs.com/Kirarrr/p/10332374.html
Copyright © 2011-2022 走看看