您的位置:首页 > 编程语言 > Java开发

华为机试-和尚挑水(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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息