能不能教我这道题怎么解:某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:
和尚1: 星期二,四;
和尚2: 星期一,六;
和尚3: 星期三,日;
和尚4: 星期五;
和尚5: 星期一,四,六;
和尚6: 星期二,五;
和尚7: 星期三,六,日;
请将所有合理的挑水时间安排表,请将结果以TXT文本文件输出。

解决方案 »

  1.   

    将和尚和自己有时间的星期放在一个二维数组里面
    a[][]={{2,4},{1,6},{3,7},{5},{1,4,6},{2,5},{3,6,7}}
    再检查a[i]的长度,如果长度为1的话,那么对应的就应该是自己所对应的星期,并且同时将数组里面有该星期的全部删掉,再来看a[i]的长度
    如此反复,估计可以的出最后的结果
      

  2.   

    相当于排列组合,只要排出的结果没有重复,就是答案了。
    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;
                }
            }
        }