美文网首页
搜索与回溯系列十一 全排列

搜索与回溯系列十一 全排列

作者: 徐慵仙 | 来源:发表于2020-02-14 10:21 被阅读0次

题目

设n个整数的集合{1,2,3,,,n},从中取出r个进行排序(r<n),试列出所有可能。

代码

#include <iostream>
using namespace std;
int n,r;
int a[1001];
int b[1001]={0};
int total=0;
void print(){
    total++;
    for(int i=1;i<=r;i++) cout<<a[i]<<" ";
    cout<<endl;
}
void search(int k){
    for(int i=1;i<=n;i++){
        if(!b[i]){
            a[k]=i;
            b[i]=1;
            if(k==r) print();
            else search(k+1);
            b[i]=0;
        }
    }
}
int main(){
    cin>>n>>r;
    search(1);
    cout<<total;
    }

分析

套模版练习题

1 for循环范围

即可选范围,对于任意k层,1~n中任何一个数都可选,故for循环范围为1~n

    for(int i=1;i<=n;i++)

2 可选条件

只要没用使用过都可选,用一个数组b表示是否使用过,若i使用过,则把b[i]设为1,入b[10]没用使用过,则b[10]=0;

if(!b[i])

3 选择后的变化

  • 第k层,就是在选第k个数,即 a[k]=i;
  • i被选中,b[i]设为1
if(!b[i]){
            a[k]=i;
            b[i]=1;
      
        }

4 结束条件

  • 如果,k==r,则选完了,输出
  • 否则下一层
if(!b[i]){
            a[k]=i;
            b[i]=1;
            if(k==r) print();
            else search(k+1);
        }

5 回溯

  • 只需要去掉选中状态,b[i]=0即可。
  • 数组a无需处理,重新赋值就直接覆盖了。
if(!b[i]){
            a[k]=i;
            b[i]=1;
            if(k==r) print();
            else search(k+1);
            b[i]=0;
        }

相关文章

  • 搜索与回溯系列十一 全排列

    题目 设n个整数的集合{1,2,3,,,n},从中取出r个进行排序(r

  • 「回溯算法」专题介绍

    「回溯算法」专题介绍 第 1 节:从全排列问题开始理解回溯搜索算法 引言 大家好,今天要和大家分享的主题是“回溯算...

  • leetcode第46题:全排列 [中等]

    题目描述 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 考点 回溯算法 深度优先搜索 解题思路 回溯算...

  • 回溯--全排列

    目录[https://www.jianshu.com/p/85e18c21317a] 题号[https://lee...

  • 4.2 回溯法(2)

    套路 解决全排列问题可以用到回溯 全排列问题往往可以用交换两位置元素的方法,完成后续步骤后,需要回溯时再交换回原来...

  • 递归与回溯:46.全排列

    /** 题目 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3]输出:[[1...

  • 全排列

    回溯实现全排列 给定一组数,如:1,2,3。编程实现全排列形式:123,132,213,231,312,321

  • 排列组合与回溯法

    排列,组合,回溯法 ex.1 ex.2 排列 全排列:从第一个数字起,每个数字分别与它后面的数字交换 去重全排列:...

  • 回溯一:全排列、子集

    46. 全排列[https://leetcode-cn.com/problems/permutations/]47...

  • 全排列(LeetCode 46 回溯)

    题目 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3]输出:[[1,2,3],...

网友评论

      本文标题:搜索与回溯系列十一 全排列

      本文链接:https://www.haomeiwen.com/subject/rrqdfhtx.html