您的位置:首页 > 其它

DFS深度优先搜索简单案例:Coin解决方案

2013-09-24 15:43 597 查看
2012创新工场校园招聘的一道编程算法题:有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱?

/**
* Coin Permutation
* 有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱?
* @author arhaiyun
* Date: 2013-09-24
*/

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;

int target = 0; //目标coin分数
int curCoins = 0; //当前coin总数

int count = 0;
vector<int> solution; //记录排列解决方案

int coins[] = {1, 2, 5, 10};

void dfsCoinSolution(int index)
{
if(curCoins == target)
{
count++;
vector<int>::iterator iter = solution.begin();
cout<<"["<<count<<"]:";
for(; iter != solution.end(); iter++)
{
cout<<(*iter)<<" ";
}
cout<<endl;

return;
}

if(curCoins > target)
return;

for(int i = index; i < 4; i++)
{
solution.push_back(coins[i]);
curCoins += coins[i];
dfsCoinSolution(i);
curCoins -= coins[i];
solution.pop_back();
}
}

int main(void)
{
while(1)
{
count = 0;
cin>>target;

if(target <= 0)
break;

dfsCoinSolution(0);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: