华为机试-和尚挑水(Java)
2016-09-18 16:46
253 查看
华为机试-和尚挑水(Java)
某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:和尚1: 星期二,四;
和尚2: 星期一,六;
和尚3: 星期三,日;
和尚4: 星期五;
和尚5: 星期一,四,六;
和尚6: 星期二,五;
和尚7: 星期三,六,日;
请将所有合理的挑水时间安排表。
和尚的输入为数组.(自建状态输入与题目不同)
代码如下:(采用回溯法)
// 0表示和尚尚未分配任务,1表示已分配 private static int[] monkStatus = new int[7]; // 一个星期每天的分配计划 private static int[] plan = new int[]{-1,-1,-1,-1,-1,-1,-1}; // 和尚状态输入 private static int[][] monkScheme = new int[][]{ {0,1,0,0,1,0,0}, {1,0,0,0,0,1,0}, {0,1,0,1,0,0,0}, {0,0,1,0,1,0,0}, {1,0,0,0,0,1,0}, {0,0,1,0,0,0,1}, {0,0,0,1,0,0,1}}; public static void monkForWater(){ backtrack(0); } public static void backtrack(int n){ if (n == 7){ // 输出 System.out.println(Arrays.toString(plan)); }else { // 循环判断哪个和尚有空 for (int j = 0; j < 7; j++){ if (monkStatus[j] == 0 && monkScheme[j] == 1){ monkStatus[j] = 1; plan = j + 1; backtrack(n + 1); monkStatus[j] = 0; plan = -1; } } } }
输出结果如下:
[2, 1, 6, 3, 4, 5, 7] [2, 3, 4, 7, 1, 5, 6] [5, 1, 6, 3, 4, 2, 7] [5, 3, 4, 7, 1, 2, 6]
相关文章推荐
- [华为机试真题][2015]65.和尚挑水
- 华为机试:和尚挑水问题
- [华为机试真题][2015]65.和尚挑水
- 华为机试正式版(西安c/c++/java),今天下午去机试的题目,新奇出炉了!
- (华为机试大备战)java。多了解了解最常用的那个类库的方法对处理字符串的方法
- 2015华为招聘机试样题(java实现)
- java 华为机试题目-数组处理
- java 华为机试题目-数组处理
- Java - 华为机试训练 - 字符串分隔
- 华为和尚挑水问题(转化)
- 华为机试和尚挑水
- Java - 华为机试训练 - 质数因子
- 华为JAVA机试流程
- Java - 华为机试训练 - 字符串最后一个单词的长度
- Java - 华为机试训练 - 计算字符个数
- 【华为机试题】和尚挑水
- 华为机试准备--练习(JAVA实现)
- 华为机试准备--练习题(JAVA实现)
- 华为机试练习---java实现电话号码本
- 华为校园招聘java机试整理