码迷,mamicode.com
首页 > 其他好文 > 详细

练习20140814

时间:2014-08-14 10:34:58      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:blog   os   io   for   ar   2014   cti   div   

/********************************************************************
@file     Main_practise.cpp
@date     2014-8-14
@author   Tiger
@brief    全排列
		  由于采用非递归的C++函数来输出n个元素的所有排列方式很困难,
		  所以可以开发一个递归函数来实现。令E={e1,...,en}表示n个元素
		  的集合,我们的目标是生成该集合的所有排列方式。令Ei为E中移
		  去元素i以后所获得的集合,perm(X)表示集合X中元素的排列方式,
		  ei.perm(X)表示在perm(X)中的每个排列方式的前面均加上ei以后所
		  得到的排列方式。例如,如果E={a,b,c},那么E1={b,c},perm(E1)=(bc,cb),
		  e1.perm(E1)=(abc,acb)。对于递归的基本部分,采用n=1。当只有一
		  个元素时,只可能产生一种排列方式,所以perm(E)=(e),其中e是
		  E中的唯一元素。当n>1时,perm(E)=e1.perm(E1)+e2.perm(E2)+e3.perm(E3)+ ? +en.perm(En)。
		  这种递归定义形式是采用n个perm(X)来定义perm (E), 其中每个X包含n-1个元素。
		  至此,一个完整的递归定义所需要的基本部分和递归部分都已完成。

		  当n=3并且E=(a,b,c)时,按照前面的递归定义可得perm(E)=a.perm({b,c})+b.perm({a,c})+c.perm({a,b})。
		  同样,按照递归定义有perm({b,c})=b.perm({c})+c.perm({b}), 所以
		  a.perm({b,c})=ab.perm({c})+ac.perm({b})=ab.c+ac.b=(abc,acb)。同理可得
		  b.perm({a,c})=ba.perm({c})+bc.perm({a})=ba.c+bc.a=(bac,bca),
		  c.perm({a,b})=ca.perm({b})+cb.perm({a})=ca.b+cb.a=(cab,cba)。
		  所以perm(E)=(abc,acb,bac,bca,cab,cba)。
********************************************************************/
#include <iostream>

const int SIZE = 5;

template <typename T>
void CalFullArray(T array[], int nBeg, int nEnd);

template <typename T>
void Swap(T& a, T& b);

int main(int argc, const char* argv[])
{
	int array[SIZE] = {1, 2, 3, 4, 5};
	CalFullArray(array, 0, SIZE-1);

	system("pause");
	return 0;
}

template <typename T>
void CalFullArray(T array[], int nBeg, int nEnd)
{
	if (nBeg == nEnd)
	{
		for (int i=0; i<=nEnd; ++i)
		{
			std::cout << array[i];
		}
		std::cout << std::endl;
	}
	else
	{
		for (int i=nBeg; i<=nEnd; ++i)
		{
			Swap(array[nBeg], array[i]);
			CalFullArray(array, nBeg+1, nEnd);
			Swap(array[nBeg], array[i]);
		}
	}
}

template <typename T>
void Swap(T& a, T& b)
{
	int temp = a;
	a = b;
	b = temp;
}

 

练习20140814,布布扣,bubuko.com

练习20140814

标签:blog   os   io   for   ar   2014   cti   div   

原文地址:http://www.cnblogs.com/roronoa-zoro-zrh/p/3911784.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!