等式补全dfs+剪枝

第六题

下图中,每个方块代表 113 中的某一个数字,但不重复。

例如:

1×2+9×7=13×5

10×8+12×3=11×4

只要有任意一个方块代表的数字不同,就算两种不同的方案。

请你计算,一共有多少种不同的方案。

答案 122368


代码

public class Main {
	static int sum = 0;
	public static void main(String[] args) {
		int[] mk = new int[14];
		int[] arr = new int[13];
		for (int i = 1; i < 14; i++) {
			arr[0] = i;
			dfs(mk, arr, 0, i);
		}
		System.out.println(sum);
	}
	public static void dfs(int[] mk, int[] arr, int step, int num) {
		if (step == 12 && arr[6] * arr[7] + arr[8] * arr[9] == arr[10] * arr[11]) {
			sum++;
			return;
		}
		step++;
		mk[num] = 1;
		for (int i = 1; i < 14; i++) {
			if (step > 12 || mk[i] == 1)
				continue;
			arr[step] = i;
			if (step == 5 && arr[0] * arr[1] + arr[2] * arr[3] != arr[4] * arr[5])
				continue;
			dfs(mk, arr, step, i);
		}
		mk[num] = 0;
	}
}


猜你喜欢

转载自blog.csdn.net/sdzhr/article/details/69389034
今日推荐