小小手痒,写了一个立方体自动拼图软件。
需求:任意给出6块正方形图片,寻找能把它们作为一个立方体的6面拼接起来的方案。
拼接结果图示:
代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class CubeMatch {
// 返回整数数组is[]的全排列
public static List<int[]> permutation(List<int[]>list, int[] is) {
List<int[]> r = new ArrayList<int[]>();
if (list.size()==0)
r.add(Arrays.copyOfRange(is, 0, 1));
else
for (int i=0; i<list.size(); i++) {
int[] ois = list.get(i);
for (int j=0; j<=ois.length; j++) {
int[] nis = new int[ois.length+1];
for (int k=0; k<nis.length; k++)
nis[k] = k==j? is[0] : (k<j? ois[k]: ois[k-1]);
r.add(nis);
}
}
if (is.length==1) return r;
else {
int[] nis = Arrays.copyOfRange(is, 1, is.length);
return permutation(r, nis);
}
}
// 拼图匹配用的方法
public static Arris[] put(int[] permu, int[] edges) {
Arris[] as = new Arris[24];
for (int i=0; i<4; i++) {
as[i*2] = new Arris(0,i);
as[i*2+1]= new Arris(permu[i], edges[i]);
as[8+i*2]= new Arris(permu[i],edgePlus(edges[i],1));
as[8+i*2+1]