您的位置:首页 > 其它

华为和尚挑水问题(转化)

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;}测试结果:

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