胡凡算法之——全排列问题

首先来看一下关于全排列的思想,很明显就是一个递归问题,后面的数是前面没有出现过的数即可。

 

具体代码如下:

#include<iostream>
using namespace std;
const int maxn=11;
int n,P[maxn],hashTable[maxn]={false};//用P去存数字,hahTable去检验一个数字是否已经出现过; 
void generateP(int index)
{
    if(index == n+1){         //递归边界,已经处理好1-n 
         for(int i=1;i<=n;i++){
         	cout<<P[i];       //输出即可 
		 }
		 cout<<endl;
		 return;
	} 
	for(int x=1;x<=n;x++){
		if(hashTable[x] == false){         //若是false,则代表x还没用 
			P[index]=x;
			hashTable[x]=true;
			generateP(index+1);          //最精华的一步,递归下一位; 
			
			hashTable[x] = false;//最后将下次要用的全部清掉,方便使用; 
		}
	}
}    

int main()
{
	n=3;
	generateP(1);
	return 0;
} 



         

打印之后是一到三的全排列,若有其他需要可在主函数直接更改;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值