长生栈 长生栈
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Living Team

编程技术分享
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 编程语言

  • 数据结构和算法

    • 全排列算法实现
      • 问题
      • 思想
      • 代码
      • 结果
    • 动态规划算法
    • Leetcode-46-全排列
    • Leetcode-78-子集
    • Leetcode-90-子集 II
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 数据库

  • 设计模式

  • 基础
  • 数据结构和算法
DC Wang
2022-05-04
目录

全排列算法实现原创

# 全排列算法实现

# 问题

得到a,b,c,d的所有排列顺序。

# 思想

分治法:依次固定第一位的字母,剩下的位再做全排列。

例如,

// Q(a,b,c,d)表示a,b,c,d的全排列
Q(a,b,c,d) = {
    1=a,+Q(b,c,d),	// 第一位是a,剩下bcd做全排列
	1=b,+Q(a,c,d),	// ab交换,使b做第一位
	1=c,+Q(b,a,d),	// ac交换,使c做第一位
	1=d,+Q(b,c,a),	// ad交换,使d做第一位
}
1
2
3
4
5
6
7

这样4字母的全排列就被分解成了多个3字母全排列,如此继续递归,最终一个字母的全排列就是它本身,递归结束。

# 代码

#include<iostream>
using namespace std;

//交换
void swap (char &a, char &b) {
	char temp;
	temp = a;
	a = b;
	b = temp;
}

//全排列递归算法
void permutation (char list[], int first ,int size) {
	if (first == size - 1) {
		for (int i = 0 ;i < size; i++) {
            cout << list[i];
        } 
		cout << endl; 
	} else {
	 	for (int i = first; i < size; i++) {
	 		swap(list[i],list[first]);
	 		permutation(list, first + 1, size);
	 		swap(list[i], list[first]);
		}
	}
}

int main (void) {
   char list[] = {'a', 'b', 'c', 'd'};
   int first = 0;
   int size = 4;
   permutation(list, first, size);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 结果

abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
编辑 (opens new window)
#算法#分治法
上次更新: 2022/10/03, 09:24:26
Java教程
动态规划算法

← Java教程 动态规划算法→

最近更新
01
ESP32-网络摄像头方案
06-14
02
ESP32-PWM驱动SG90舵机
06-14
03
ESP32-实时操作系统freertos
06-14
更多文章>
Theme by Vdoing | Copyright © 2019-2025 DC Wang All right reserved | 辽公网安备 21021102001125号 | 吉ICP备20001966号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式