• 全排列问题


    全排列

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <queue>
     5 #include <algorithm>
     6 #include <cstdio>
     7 
     8 using namespace std;
     9 #define MAX_N 10
    10 int n; //共n 个数
    11 int rcd[MAX_N]; //记录每个位置填的数
    12 int used[MAX_N]; //标记数是否用过
    13 int num[MAX_N]; //存放输入的n 个数
    14 void full_permutation(int l) {
    15     int i;
    16     if (l == n) {
    17         for (i = 0; i < n; i++) {
    18             printf("%d", rcd[i]);
    19             if (i < n - 1)
    20                 printf(" ");
    21         }
    22         printf("\n");
    23         return;
    24     }
    25     for (i = 0; i < n; i++) // 枚举所有的数(n个),  循环从开始
    26         if (!used[i]) { //若num[i] 没有使用过, 则标记为已使用
    27             used[i] = 1;
    28             rcd[l] = num[i]; //在l 位置放上该数
    29             full_permutation(l + 1); //填下一个位置
    30             used[i] = 0; // 清标记
    31         }
    32 }
    33 
    34 int read_data() {
    35     int i;
    36     n = 3;
    37     for (i = 0; i < n; i++)
    38         num[i] = i;
    39     for (i = 0; i < n; i++)
    40         used[i] = 0;
    41 
    42     return 1;
    43 }
    44 
    45 void recursive_permutation(int l) { //直接在数据上做全排列,只用到了num和n
    46     int i;
    47     if (n == l) {
    48         for (i = 0; i < n; i++) {
    49             printf("%d", num[i]);
    50             if (i < n - 1)
    51                 printf(" ");
    52         }
    53         cout << endl;
    54         return;
    55     }
    56     for (i = l; i < n; i++) {
    57         swap(num[i], num[l]);
    58         recursive_permutation(l + 1);
    59         swap(num[i], num[l]);
    60     }
    61 
    62 }
    63 
    64 int main() {
    65     read_data();
    66     full_permutation(0);
    67     recursive_permutation(0);
    68     return 0;
    69 }

    不重复的全排列

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <queue>
     5 #include <algorithm>
     6 #include <cstdio>
     7 
     8 using namespace std;
     9 #define MAX_N 10
    10 int n; //共n 个数
    11 int m;//共m种数
    12 int rcd[MAX_N]; //记录每个位置填的数
    13 int used[MAX_N]; //标记每个数字可以用的次数
    14 int num[MAX_N]; //存放输入的n 个数
    15 int read_data() {
    16     int i;
    17     n=4;
    18     m=2;
    19     for (i = 0; i < n; i++)
    20         num[i]=i;
    21     for (i = 0; i < n; i++)
    22         used[i] = 2;
    23     return 1;
    24 }
    25 
    26 void unrepeat_permutation(int l) {
    27     int i;
    28     if (l == n) { // 填完了n 个数,则输出
    29         for (i = 0; i < n; i++) {
    30             printf("%d", rcd[i]);
    31             if (i < n - 1)
    32                 printf(" ");
    33         }
    34         printf("\n");
    35         return;
    36     }
    37     for (i = 0; i < m; i++) // 枚举m 个本质不同的数,跟全排列的主要区别
    38         if (used[i] > 0) { //若数num[i] 还没被用完,则可使用次数减
    39             used[i]--;
    40             rcd[l] = num[i]; //在l 位置放上该数
    41             unrepeat_permutation(l + 1); //填下一个位置
    42             used[i]++; //可使用次数恢复
    43         }
    44 }
    45 int main() {
    46     read_data();
    47     unrepeat_permutation(0);
    48     return 0;
    49 }
  • 相关阅读:
    test3
    test2
    test
    移动布局之流式布局
    移动端布局
    如何将本地项目上传到Github上
    node: 使用res.send()时报错RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: *
    字体图标
    pip install Wikipedia2Vec时报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 41: invalid continuation byte
    tensorflow与keras版本不匹配问题
  • 原文地址:https://www.cnblogs.com/kakamilan/p/2622821.html
Copyright © 2020-2023  润新知