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

来源:互联网 发布:乘联会9月销量数据 编辑:程序博客网 时间:2024/06/04 01:22

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;}
原创粉丝点击