Exercise(7):和尚挑水
来源:互联网 发布:人工智能在医疗领域 编辑:程序博客网 时间:2024/05/14 06:58
/* 范房清 【问题描述】和尚挑水 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期五; 和尚5: 星期一,四,六; 和尚6: 星期二,五; 和尚7: 星期三,六,日; 请将所有合理的挑水时间安排表 【程序输入输出】 input: 请输入和尚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 output: 方案1: 星期1和尚2挑水 星期2和尚6挑水 星期3和尚3挑水 星期4和尚1挑水 星期5和尚4挑水 星期6和尚5挑水 星期7和尚7挑水 方案2: 星期1和尚2挑水 星期2和尚6挑水 星期3和尚7挑水 星期4和尚1挑水 星期5和尚4挑水 星期6和尚5挑水 星期7和尚3挑水 方案3: 星期1和尚5挑水 星期2和尚6挑水 星期3和尚3挑水 星期4和尚1挑水 星期5和尚4挑水 星期6和尚2挑水 星期7和尚7挑水 方案4: 星期1和尚5挑水 星期2和尚6挑水 星期3和尚7挑水 星期4和尚1挑水 星期5和尚4挑水 星期6和尚2挑水 星期7和尚3挑水 共有4种方案 问题分析: 与八皇后问题相似。 *//* 为了方便,不使用首元素 */#include <iostream>using namespace std;const int MonkCount = 7; // 和尚个数以及星期 bool DayMark[MonkCount+1]; // 用以标记星期c 是否已经安排和尚r (从星期1-星期7)int WorkChart[MonkCount+1]; // 工作表 下标为 星期c 值为第r位和尚 (从和尚1-和尚7)int Count; // 方案数 void ShowChart(); // 显示工作表 void Search(int (*Chart)[MonkCount+1],int r); // 绘制工作表 int main(){ int i,j; int MonkTime[MonkCount+1][MonkCount+1] = {0}; // 和尚空闲日 Count = 0; // 初始化方案数为0 for(i=0;i<=MonkCount;i++) // 初始化标记数组 皆为 false { // 初始化工作表皆为 0 DayMark[i] = false; WorkChart[i] = 0; } for(i=1;i<=MonkCount;i++) // 输入和尚空闲日 { cout<<"请输入和尚 "<<i<<" 的空闲时间:"; for(j=1;j<=MonkCount;j++) { cin>>MonkTime[i][j]; } } Search(MonkTime,1); // 从第1个和尚开始 cout<<endl<<"总计有 "<<Count<<" 种方案."<<endl; return 0;}// 显示工作表 void ShowChart(){ int i; cout<<"方案 "<<++Count<<":"<<endl; for(i=1;i<=MonkCount;i++) { cout<<"星期"<<i<<" 和尚"<<WorkChart[i]<<"挑水"<<endl; }}// 绘制工作表 void Search(int (*Chart)[MonkCount+1], int r){ if(r>MonkCount) // 当计算完和尚7后,直接打印 { ShowChart(); } int c; for(c=1;c<=MonkCount;c++) // 从星期一开始 { // 判断星期c是否还没有设置和尚 并且 对应的和尚r在星期c是否有空 if(DayMark[c]==false && Chart[r][c]==1) { DayMark[c] = true; // 通过判断,则在星期c安排和尚r工作 WorkChart[c] = r; Search(Chart,r+1); // 安排和尚r+1的工作 DayMark[c] = false; // 安排完毕,取消星期c的安排 } }}
0 0
- Exercise(7):和尚挑水
- 和尚挑水
- 和尚挑水
- 和尚挑水问题
- 和尚挑水的故事
- 三个和尚挑水吃
- 和尚挑水问题
- 七个和尚挑水
- 和尚挑水问题
- 和尚挑水问题
- C++:七个和尚挑水问题
- 华为机试和尚挑水
- 【华为机试题】和尚挑水
- 和尚挑水(回溯法)
- 和尚挑水故事IT新解
- 和尚挑水故事IT新解
- 和尚挑水故事IT新解
- 和尚挑水故事IT新解
- Codeforces Round #340 (Div. 2)E - XOR and Favorite Number(Mo's algorithm)
- Letter Combinations of a Phone Number
- Tyvj_P1021
- LeeCode-Two Sum
- njust1928 puzzle(2-sat)
- Exercise(7):和尚挑水
- hexo使用技巧
- 67. Add Binary
- 装苹果
- android 多个EditText光标的问题
- leetcode 043 Multiply Strings
- 网络通信PDU和SDU的区别
- 笔试题之Java基础部分
- Html5之Full Screen API