全排列

Posted javier2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全排列相关的知识,希望对你有一定的参考价值。

全排列就是求排列组合里的A(m,n),(n>=m)的全部情况。我们要统计A(m,n)很简单用阶乘就可以求,但是要输出全部情况就有些困难了。这里我介绍记下用递归求解全排列全部情况的方法。

技术分享图片
 1 #include<cstdio>
 2 #include<iostream> 
 3 using namespace std;
 4 
 5 int n;
 6 int p[100];
 7 bool vis[100];
 8 
 9 void generage(int index,int &cnt){
10     if(index == n+1){
11         cnt++;
12         for(int i=1;i<=n;i++){
13             cout<<p[i]<<" ";
14         }
15         cout<<endl;
16         return;
17     }
18     for(int i=1;i<=n;i++){
19         if(!vis[i]){
20             p[index] = i;
21             vis[i] = true;
22             generage(index+1,cnt);
23             vis[i] = false;
24         }    
25     } 
26 }
27 
28 int main(){
29     cin>>n;
30     int cnt=0;
31     generage(1,cnt);
32     cout<<"共计"<<cnt<<"种情况" ;
33     return 0;
34 }
View Code

大概的思路如下:

以A(3,3)为例,我们可知最终情况有P(1,2,3)、P(1,3,2)、P(2,1,3)、P(2,3,1)、P(3,1,2)、P(3,2,1)这六种情况。从P[ ]中我们可以发现能分为三层,递归函数的参数index就是层的索引号,再每一层我们都尝试填入未使用过的数字,之后进入下一层继续反复如此步骤,直至P[ ]数组被填满,最后输出一种情况,之后回溯到上一层继续填入未使用过的数字,在进入下一层递归。如此反复最终输出全部情况。以上所述也就是递归的分治思想。

这个算法也是一个全排列的基本模板,稍加修改可以用于解决n皇后问题。

以上是关于全排列的主要内容,如果未能解决你的问题,请参考以下文章

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

算法设计:全排列算法代码实现

蓝桥杯 三行代码解决 “全排列的价值”(2022省赛pythonA组)

蓝桥杯 三行代码解决 “全排列的价值”(2022省赛pythonA组)

蓝桥杯 三行代码解决 “全排列的价值”(2022省赛pythonA组)

java 蓝桥杯 dfs 全排列