DFS

package test01;

public class task06 {

	static int[] data = new int[11];

	static boolean check() {
		if (check2() && check3() && check4() && check5() && check6() && check7() && check8() && check9() && check10())
			return true;
		return false;
	}

	static boolean check2() {
		if (data[5] == 3 && data[2] != 1) {
			return false;
		} else if (data[5] == 4 && data[2] != 2) {
			return false;
		} else if (data[5] == 1 && data[2] != 3) {
			return false;
		} else if (data[5] == 2 && data[2] != 4) {
			return false;
		}
		return true;
	}

	static boolean check3() {
		int[] temp = { 0, 3, 6, 2, 4 };
		for (int i = 1; i < temp.length; i++) {
			if (data[3] != i && temp[data[3]] == temp[i])
				return false;
		}
		return true;
	}

	static boolean check4() {
		if (data[4] == 1 && data[1] != data[5]) {
			return false;
		} else if (data[4] == 2 && data[2] != data[7]) {
			return false;
		} else if (data[4] == 3 && data[1] != data[9]) {
			return false;
		} else if (data[4] == 4 && data[6] != data[10]) {
			return false;
		}
		return true;
	}

	static boolean check5() {
		if (data[5] == 1 && data[5] != data[8]) {
			return false;
		} else if (data[5] == 2 && data[5] != data[4]) {
			return false;
		} else if (data[5] == 3 && data[5] != data[9]) {
			return false;
		} else if (data[5] == 4 && data[5] != data[7]) {
			return false;
		}
		return true;
	}

	static boolean check6() {
		if (data[6] == 1 && (data[8] != data[2] || data[8] != data[4])) {
			return false;
		} else if (data[6] == 2 && (data[8] != data[1] || data[8] != data[6])) {
			return false;
		} else if (data[6] == 3 && (data[8] != data[3] || data[8] != data[10])) {
			return false;
		} else if (data[6] == 4 && (data[8] != data[5] || data[8] != data[9])) {
			return false;
		}
		return true;
	}

	static boolean check7() {
		int[] temp = new int[5];
		for (int i = 1; i < data.length; i++) {
			temp[data[i]] += 1;
		}
		int min = Integer.MAX_VALUE;
		int ans = 0;
		for (int i = 1; i < temp.length; i++) {
			if (temp[i] < min) {
				min = temp[i];
				ans = i;
			}
		}
		int count = 0;
		for (int i = 1; i < temp.length; i++) {
			if (min == temp[i])
				count++;
		}
		if (count != 1 || ans != data[7])
			return false;
		return true;
	}

	static boolean check8() {
		if (data[8] == 1 && Math.abs(data[8] - data[7]) == 1) {
			return false;
		} else if (data[8] == 2 && Math.abs(data[8] - data[5]) == 1) {
			return false;
		} else if (data[8] == 3 && Math.abs(data[8] - data[2]) == 1) {
			return false;
		} else if (data[8] == 4 && Math.abs(data[8] - data[10]) == 1) {
			return false;
		}
		return true;
	}

	static boolean check9() {
		if (data[1] == data[6]) {
			if (data[9] == 1 && data[6] == data[5]) {
				return false;
			} else if (data[9] == 2 && data[10] == data[5]) {
				return false;
			} else if (data[9] == 3 && data[2] == data[5]) {
				return false;
			} else if (data[9] == 4 && data[9] == data[5]) {
				return false;
			}
		} else {
			if (data[9] == 1 && data[6] != data[5]) {
				return false;
			} else if (data[9] == 2 && data[10] != data[5]) {
				return false;
			} else if (data[9] == 3 && data[2] != data[5]) {
				return false;
			} else if (data[9] == 4 && data[9] != data[5]) {
				return false;
			}
		}
		return true;
	}

	static boolean check10() {
		int[] temp = new int[5];
		for (int i = 1; i < data.length; i++) {
			temp[data[i]] += 1;
		}
		int min = Integer.MAX_VALUE;
		int max = Integer.MIN_VALUE;
		for (int i = 1; i < temp.length; i++) {
			if (temp[i] < min) 
				min = temp[i];
			if (temp[i] > max)
				max = temp[i];
		}
		int ans = max - min;
		if (data[10] == 1 && ans != 3) {
			return false;
		} else if (data[10] == 2 && ans != 2) {
			return false;
		} else if (data[10] == 3 && ans != 4) {
			return false;
		} else if (data[10] == 4 && ans != 1) {
			return false;
		}
		return true;
	}
	static void fun(int no) {
		if (no == 11) {
			if (check())
				print();
			return;
		}
		for (int i = 1; i < 5; i++) {
			data[no] = i;
			fun(no + 1);
		}
	}
	static void print() {
		for (int i = 1; i < data.length; i++) {
			System.out.print((char) ('A' + data[i] - 1) + " ");
		}
		System.out.println();
	}

	public static void main(String[] args) {
		fun(1);
	}
}

  

posted @ 2019-08-02 14:48  continued258  阅读(121)  评论(0)    收藏  举报