当前位置:编程学习 > JAVA >>

数组的笛卡尔积,只要不重复的元组,有简便的么?


private int[][] getSevnsEx(int[][] v) {
List<int[]> list = new ArrayList<int[]>();

for (int i = 0; i < v[0].length; i++) {
for (int j = 0; j < v[1].length; j++) {
if (v[0][i] == v[1][j])
continue;
for (int k = 0; k < v[2].length; k++) {
if (v[0][i] == v[2][k] || v[1][j] == v[2][k])
continue;
for (int m = 0; m < v[3].length; m++) {
if (v[0][i] == v[3][m] || v[1][j] == v[3][m]
|| v[2][k] == v[3][m])
continue;
for (int n = 0; n < v[4].length; n++) {
if (v[0][i] == v[4][n] || v[1][j] == v[4][n]
|| v[2][k] == v[4][n] || v[3][m] == v[4][n])
continue;
for (int p = 0; p < v[5].length; p++) {
if (v[0][i] == v[5][p] || v[1][j] == v[5][p]
|| v[2][k] == v[5][p]
|| v[3][m] == v[5][p]
|| v[4][n] == v[5][p])
continue;
for (int q = 0; q < v[6].length; q++) {
if (v[0][i] == v[6][q]
|| v[1][j] == v[6][q]
|| v[2][k] == v[6][q]
|| v[3][m] == v[6][q]
|| v[4][n] == v[6][q]
|| v[5][p] == v[6][q])
continue;
int[] arr = new int[] { v[0][i], v[1][j],
v[2][k], v[3][m], v[4][n], v[5][p],
v[6][q] };
// boolean distinct = isDistinct(arr);
// if (distinct) {
list.add(arr);
// }
}
}
}
}
}
}
}
int[][] result = new int[list.size()][7];
return list.toArray(result);
}
--------------------编程问答-------------------- 补充一下:这里是7个数组的笛卡尔积,还想另求6、5、4个数组的,难道只有笨编码吗?曾经试过递归的方法,但是好像效率太低了。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,