能不能教我这道题怎么解:某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:
和尚1: 星期二,四;
和尚2: 星期一,六;
和尚3: 星期三,日;
和尚4: 星期五;
和尚5: 星期一,四,六;
和尚6: 星期二,五;
和尚7: 星期三,六,日;
请将所有合理的挑水时间安排表,请将结果以TXT文本文件输出。
和尚1: 星期二,四;
和尚2: 星期一,六;
和尚3: 星期三,日;
和尚4: 星期五;
和尚5: 星期一,四,六;
和尚6: 星期二,五;
和尚7: 星期三,六,日;
请将所有合理的挑水时间安排表,请将结果以TXT文本文件输出。
a[][]={{2,4},{1,6},{3,7},{5},{1,4,6},{2,5},{3,6,7}}
再检查a[i]的长度,如果长度为1的话,那么对应的就应该是自己所对应的星期,并且同时将数组里面有该星期的全部删掉,再来看a[i]的长度
如此反复,估计可以的出最后的结果
4135627(和尚1,星期四;和尚2,星期一;和尚3,星期三;……)
4175623
4635127
4675123 public static void main(String[] args) {
int[][] arr = {{2, 4}, {1, 6}, {3, 7}, {5}, {1, 4, 6}, {2, 5}, {3, 6, 7}};
g(arr);
} public static void g(int[][] arr) {
g(arr, 0, 0);
} private static void g(int[][] arr, int c, int s) {
if (c >= arr.length) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i][0]);
}
System.out.println();
return;
}
int[] a = arr[c];
for (int i = 0; i < a.length; i++) {
int temp = a[i];
int x = 1 << temp >> 1;
if ((s & x) == 0) {
a[i] = a[0];
a[0] = temp;
g(arr, c + 1, s + x);
a[0] = a[i];
a[i] = temp;
}
}
}