华为和尚挑水问题(转化)
2015-09-14 20:33
253 查看
某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期五; 和尚5: 星期一,四,六; 和尚6: 星期二,五;
和尚7: 星期三,六,日;
请输入和尚1的空闲时间:0 1 0 1 0 0 0 请输入和尚2的空闲时间:1 0 0 0 0 1 0 请输入和尚3的空闲时间:0 0 1 0 0 0 1 请输入和尚4的空闲时间:0 0 0 0 1 0 0 请输入和尚5的空闲时间:1 0 0 1 0 1 0 请输入和尚6的空闲时间:0 1 0 0 1 0 0 请输入和尚7的空闲时间:0 0 1 0 0 1 1#include <iostream>#include <string>#include <vector>#include <stack>#include <algorithm>using namespace std;void DWater1(vector<vector<int> > &spare,int index,int &count,vector<int> &week,vector<bool> &visited){int i;if(index == 7){++count;return;}for(i = 0;i < 7;++i){week[index] = i;// 判断和尚j是否已经挑过水及和尚星期n是否有空if(!visited[i] && spare[i][index] == 1){visited[i] = true;DWater1(spare,index+1,count,week,visited);visited[i] = false;}}}void DWater(vector<vector<int> > &spare,int index,vector<int> &week,vector<bool> &visited){int i;if(index == 7){for(i = 0; i < 7;++i){cout<<week[i]+1<<" ";}cout<<endl;return;}for(i = 0;i < 7;++i){week[index] = i;// 判断和尚j是否已经挑过水及和尚星期n是否有空if(!visited[i] && spare[i][index] == 1){visited[i] = true;DWater(spare,index+1,week,visited);visited[i] = false;}}}int main(){vector<vector<int> > spare(7,vector<int>(7,0));for(int i = 0;i < 7;++i){for(int j = 0;j < 7;++j){cin>>spare[i][j];}}int count = 0;vector<int> week(7,0);vector<bool> visited(7,false);DWater1(spare,0,count,week,visited);cout <<count<<endl;DWater(spare,0,week,visited);return 0;}测试结果:
相关文章推荐
- 用AttributedString,来制作简单地描边效果
- informix之二
- 批处理
- malloc/free 与new/delete对比
- Android Fragment 真正的完全解析(下)
- python学习——fnmatch
- 【读书笔记】iOS-内存管理
- hdu 3037 Saving Beans(lucas定理)(卢卡斯定理)
- 模板方法模式(Template Method)
- JSON数据提取的基本方法-2015年9月14日
- ionic
- 【读书笔记】iOS-内存管理
- HDU 1950 Bridging signals ( 枚举+DFS O(n2^n) )
- JavaScript获取iframe的内容
- informix之一
- MyEclipse不能编译的解决方案
- dfs与bfs
- Oracle数据库安装成功后,忘记解锁账户和设置密码
- python核心编程第4章课后题答案(第二版75页)
- 排序算法之归并排序