c_cpp 【递归法】排列问题【2-4】

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 【递归法】排列问题【2-4】相关的知识,希望对你有一定的参考价值。

//2-4 排列问题
#include "stdafx.h"
#include <iostream>     
using namespace std; 
 
template <class Type>
inline void Swap(Type &a,Type &b);
 
template <class Type>
void Perm(Type list[],int k,int m);
 
int main()
{
	int list[3];
	for(int i=0; i<3;i++)
	{
		list[i] = i+1;
	}
	Perm(list,0,2);
	return 0;
}
 
template <class Type>
inline void Swap(Type &a,Type &b)
{
	Type temp = a;
	a = b;
	b = temp;
}
 
template <class Type>
void Perm(Type list[],int k,int m)
{
	//只剩下一个元素
	if(k == m){
		for(int i=0; i<=m; i++)
		{
			cout<<list[i]<<" ";
		}
		cout<<endl;
	}
	else
	{
		//将list[k:m}中的每一个元素分别与list[k]中的元素交换
		//然后递归计算list[k+1:m]的全排列,将计算结果作为list[0:k]后缀
		for(int i=k; i<=m;i++){
			Swap(list[k],list[i]);
			Perm(list,k+1,m);
			Swap(list[k],list[i]);
		}
	}
}

以上是关于c_cpp 【递归法】排列问题【2-4】的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 非递归n! C中的排列

Permutations,全排列

JavaScript 递归法排列组合二维数组

JavaScript 递归法排列组合二维数组2

力扣784. 字母大小写全排列 回溯法 C++递归和非递归俩种实现非方式

左神算法第八节课:介绍递归和动态规划(汉诺塔问题;打印字符串的全部子序列含空;打印字符串的全排列,无重复排列;母牛数量;递归栈;数组的最小路径和;数组累加和问题,一定条件下最大值问题(01背包))