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

全排列

时间:2014-08-06 22:58:32      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:io   for   amp   return   on   递归   print   class   

/*
全排列的非递归实现,支持去掉重复
*/

void main()
{
	rbuf<int> v
	#v.push(1,2,3,4)
	for
		v.join('').printl
		ifn next_permutation<int>(v)
			break
}

bool next_permutation<T>(rbuf<T>& v)
{
	if v.count<=1
		return false
	next=v.count-1
	for
		temp=next
		next--
		if v[next]<v[temp]
			mid=v.count-1
			for !(v[next]<v[mid])
				mid--
			swap<T>(v[next],v[mid])
			reverse<T>(v,temp)
			return true
		if next==0
			reverse<T>(v,0)
			return false
}

void swap<T>(T& a,T& b)
{
	temp=a
	a=b
	b=temp
}

void reverse<T>(rbuf<T>& v,int begin,int end=v.count)
{
	end--
	for begin<end
		swap<T>(v[begin],v[end])
		begin++
		end--
}

全排列,布布扣,bubuko.com

全排列

标签:io   for   amp   return   on   递归   print   class   

原文地址:http://blog.csdn.net/roundsheep/article/details/38407775

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