全排序vs八皇后问题vs三角八皇后

本文探讨了全排序算法的时间复杂度,并通过递推公式解释了如何实现。接着,作者联系到了经典的八皇后问题,分析了其与全排列的相似性,并提出了解决八皇后问题的思路。最后,文章延伸到三角形八皇后问题,给出了相关放置皇后数量的结论,并提及解决问题的简洁代码实现。
摘要由CSDN通过智能技术生成

假设要求字符串/数组的全排序,例如:"123"的全排序,第1位有3种选择,第2位有2种选择,第3位1种选择,时间复杂度显然是3!.实际上容易知道,对于n个字符,全排序一共有n!种可能,是n!时间复杂度的.我们需要找一个算法求出所有的可能的排序,最好的办法是递归,如果选用循环,需要n层嵌套,不太现实.假设我们已经拥有一个函数 FullPermutation(A[n])能将数组A[n]全排序,于是,我们可以将A[n]分为A[1]和A[n-1]两个子问题,其中,A[1]可以有n种选择,选择办法是:将A[1]和A[i]交换,其中,i=1,2,3,4.......记得交换后,需要复原.A[n-1]的全排序可以通过调用FullPermutation()完成.
递推公式:
F(n):  = Done n=1  
  = n*F(n-1) n>1

由上面的分析和递推公式就很容易写出代码了:

#include<iostream>
using namespace std;
void Full_permutation(int* A,int beg,int end)
{
	if(beg == end)
	{
		for(int i=0;i<=end;++i)
			cout<<A[i]<<' ';
		cout<<endl;
		return ;
	}
	for(int i=beg;i <= end; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值