多个集合积-笛卡尔积

来源:互联网 发布:mysql删除唯一约束 编辑:程序博客网 时间:2024/05/29 12:39

问题:求多个集合的笛卡尔积,{a,c}*{b,d}*{e,f,g}……

思路:使用两个临时集合交替存贮与集群中的集合的笛卡尔积。

 public static void main (String[]args){            char[][] a = {{'a', 'b'}, {'c', 'e', 'y'}, {'z', 'y'}, {'e', 'g', 'h', 'x', 'f'}};            int x = 1;            for (int i = 0; i < a.length; i++) {                x *= a[i].length;            }            String[] temp = new String[x + 1];            String[] temp1 = new String[x + 1];            for (int i = 0; i < a[0].length; i++) {                temp[i] = a[0][i] + "";            }            boolean flag = true;            for (int i = 1; i < a.length; i++) {                x = 0;                for (int j = 0; j < a[i].length; j++) {                    if (flag) {                        for (int k = 0; k < temp.length; k++) {                            if (temp[k] == null) break;                            temp1[x++] = a[i][j] + temp[k];                        }                    } else {                        for (int k = 0; k < temp1.length; k++) {                            if (temp1[k] == null) break;                            temp[x++] = a[i][j] + temp1[k];                        }                    }                }                if (flag) {                    flag = false;                } else {                    flag = true;                }            }            String[] re;            if (flag) {                re = temp;            } else {                re = temp1;            }            for (String ss : re) {                if (ss != null)                    System.out.print(ss + " ");            }        }
output:
ezca ezcb ezea ezeb ezya ezyb eyca eycb eyea eyeb eyya eyyb gzca gzcb gzea gzeb gzya gzyb gyca gycb gyea gyeb gyya gyyb hzca hzcb hzea hzeb hzya hzyb hyca hycb hyea hyeb hyya hyyb xzca xzcb xzea xzeb xzya xzyb xyca xycb xyea xyeb xyya xyyb fzca fzcb fzea fzeb fzya fzyb fyca fycb fyea fyeb fyya fyyb