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

整数划分问题并显示每一种划分形式

时间:2014-11-11 14:27:01      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:c++   整数划分   算法   递归   

#include<iostream>
#include<algorithm>
#include<iterator>
#include<set>
using namespace std;

/*
*整数划分问题并显示每一种分法
*/

set<multiset<int>> GetAllIntDivision(int n)
{
	set<multiset<int>> allDivision;
	if(1==n)
	{
		multiset<int> aa;
		aa.insert(1);
		allDivision.insert(aa);
	}
	else
	{
		set<multiset<int>> iniDivision = GetAllIntDivision(n-1);
		for(set<multiset<int>>::iterator iter = iniDivision.begin();iter != iniDivision.end();iter++)
		{
			//添加后缀项
			multiset<int> inimul;
			inimul = *iter;
			inimul.insert(1);
			allDivision.insert(inimul);
			//添加累加项
			/*inimul = *iter;*/
			for (multiset<int>::iterator it = (*iter).begin();it!=(*iter).end();++it)
			{
				multiset<int>::iterator iit = it;
				inimul = *iter;
				while((++iit)!=(*iter).end()&&(*it)==(*iit))
				{
					iit = (++it);
				}
				inimul.erase(inimul.find(*it));
				inimul.insert((*it)+1);
				allDivision.insert(inimul);
			}
		}
	}
	return allDivision;
}
int main()
{
	set<multiset<int>> allDivision;
	allDivision = GetAllIntDivision(6);
	//输出结果
	for(set<multiset<int>>::iterator iter = allDivision.begin();iter != allDivision.end();iter++)
	{
		copy((*iter).begin(),(*iter).end(),ostream_iterator<int>(cout," "));
	    cout<<endl;
	}
	return 0;
}

整数划分问题并显示每一种划分形式

标签:c++   整数划分   算法   递归   

原文地址:http://blog.csdn.net/yyc1023/article/details/41010231

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