和尚挑水问题
2014-12-17 10:25
183 查看
这是一道华为的机试题,题目是这样的:
有七个和尚,寺庙七天中每天要安排一个人挑水。现在有一个时间表,上面记录了每个和尚七天中有空的日期,请输出所有可能的挑水值日表!
这个题目很像八皇后问题,用递归应该很容易就实现了!
有七个和尚,寺庙七天中每天要安排一个人挑水。现在有一个时间表,上面记录了每个和尚七天中有空的日期,请输出所有可能的挑水值日表!
这个题目很像八皇后问题,用递归应该很容易就实现了!
#include <cstdio> #define MAX 7 //和尚的人数和天数 int dataTable[MAX][MAX]; //记录和尚有空的时间表 int flag[MAX]; //记录和尚是否已经被选取到值日表中 int ans[MAX]; //值日表 void init() { //初始化变量,并且输入时间表 for(int i=0;i<MAX;i++) { flag[i]=0; ans[i]=-1; for(int j=0;j<MAX;j++) dataTable[i][j]=0; /************************************************************************/ /* 输入和尚i的时间表 */ /************************************************************************/ } } void Guess(int step) { //step表示已经确定了step之前的值日表 if(step==MAX) { //选择已经完成了 printf("\n"); for(int i=0;i<MAX;i++) printf("%c ",ans[i]+'A'); } //选择还没完成了 for(int i=0;i<MAX;i++) { //对于和尚i if((!flag[i])&&dataTable[i][step]) { ans[step]=i; flag[i]++; Guess(step+1); flag[i]--; } } } int main(int argc,char* argv[]) { init();//这个init不能保证生成的所有时间表都有结果 Guess(0); return 0; }
相关文章推荐
- 华为和尚挑水问题(转化)
- p,v原语解决和尚挑水问题
- C++:七个和尚挑水问题
- 和尚挑水安排(回溯问题)
- 和尚挑水问题
- 和尚挑水问题
- 和尚挑水问题
- 和尚挑水的问题——异常经典,符合大多数公司的现状
- [回溯法] 和尚挑水问题-华为笔试
- 华为机试:和尚挑水问题
- 一个和尚挑水吃,两个和尚抬水吃,三个和尚没水吃
- 和尚挑水的故事
- 和尚挑水
- 算法系列之三:妖怪与和尚过河问题
- 和尚取水问题
- 创业日志:一个和尚挑水喝,两个和尚抬水喝,三个和尚没水喝?
- 算法系列:妖怪与和尚过河问题
- 算法系列之三:妖怪与和尚过河问题
- 多核多线程中小和尚老和尚取水喝水问题
- 339. One boy is a boy, two boys half a boy, three boys no boy.一个和尚挑水喝,两个积水抬水喝,三个和尚没水喝