Java迭代法求所有八皇后问题的解

        八皇后问题,是个经典的算法问题,大学的时候曾经为它苦恼过,现在发现,其实是挺简单的,虽然不会国际象棋,当八皇后还是会解的,哈哈。。

先上代码

private void t6_20() {
		int a = 1, b = 9, c = 17, d = 25, e = 33, f = 41, g = 49, h = 57, n = 1;
		for (a = 1; a < 9; a++) {
			for (b = 9; b < 17; b++) {
				if (b == a + 8 || b == a + 8 + 1 || b == a + 8 - 1)
					continue;
				for (c = 17; c < 25; c++) {
					if (c == a + 2 * 8 || c == a + 2 * 8 + 2 || c == a + 2 * 8 - 2 || c == b + 8 || c == b + 9
							|| c == b + 8 - 1)
						continue;
					for (d = 25; d < 33; d++) {
						if (d == a + 3 * 8 || d == a + 3 * 8 + 3 || d == a + 3 * 8 - 3 || d == b + 2 * 8
								|| d == b + 2 * 8 + 2 || d == b + 2 * 8 - 2 || d == c + 8 || d == c + 9
								|| d == c + 8 - 1)
							continue;
						for (e = 33; e < 41; e++) {
							if (e == a + 4 * 8 || e == a + 4 * 8 + 4 || e == a + 4 * 8 - 4 || e == b + 3 * 8
									|| e == b + 3 * 8 + 3 || e == b + 3 * 8 - 3 || e == c + 2 * 8 || e == c + 2 * 8 + 2
									|| e == c + 2 * 8 - 2 || e == d + 8 || e == d + 9 || e == d + 8 - 1)
								continue;
							for (f = 41; f < 49; f++) {
								if (f == a + 5 * 8 || f == a + 5 * 8 + 5 || f == a + 5 * 8 - 5 || f == b + 4 * 8
										|| f == b + 4 * 8 + 4 || f == b + 4 * 8 - 4 || f == c + 3 * 8
										|| f == c + 3 * 8 + 3 || f == c + 3 * 8 - 3 || f == d + 2 * 8
										|| f == d + 2 * 8 + 2 || f == d + 2 * 8 - 2 || f == e + 8 || f == e + 8 + 1
										|| f == e + 8 - 1)
									continue;
								for (g = 49; g < 57; g++) {
									if (g == a + 6 * 8 || g == a + 6 * 8 + 6 || g == a + 6 * 8 - 6 || g == b + 5 * 8
											|| g == b + 5 * 8 + 5 || g == b + 5 * 8 - 5 || g == c + 4 * 8
											|| g == c + 4 * 8 + 4 || g == c + 4 * 8 - 4 || g == d + 3 * 8
											|| g == d + 3 * 8 + 3 || g == d + 3 * 8 - 3 || g == e + 2 * 8
											|| g == e + 2 * 8 + 2 || g == e + 2 * 8 - 2 || g == f + 8 || g == f + 8 + 1
											|| g == f + 8 - 1)
										continue;
									for (h = 57; h < 65; h++) {
										if (h == a + 7 * 8 || h == a + 7 * 8 + 7 || h == a + 7 * 8 - 7 || h == b + 6 * 8
												|| h == b + 6 * 8 + 6 || h == b + 6 * 8 - 6 || h == c + 5 * 8
												|| h == c + 5 * 8 + 5 || h == c + 5 * 8 - 5 || h == d + 4 * 8
												|| h == d + 4 * 8 + 4 || h == d + 4 * 8 - 4 || h == e + 3 * 8
												|| h == e + 3 * 8 + 3 || h == e + 3 * 8 - 3 || h == f + 2 * 8
												|| h == f + 2 * 8 + 2 || h == f + 2 * 8 - 2 || h == g + 8
												|| h == g + 8 + 1 || h == g + 8 - 1)
											continue;
										System.out.println("");
										System.out.println("第" + (n++) + "个:");
										for (int i = 1; i <= 64; i++) {
											if (i == a || i == b || i == c || i == d || i == e || i == f || i == g
													|| i == h)
												System.out.printf("%2s", "Q");
											else
												System.out.printf("%2s", "*");
											if (i % 8 == 0)
												System.out.println();
										}

									}
								}
							}
						}
					}
				}
			}
		}
	}

主要思想很简单,就是逐行判断皇后的位置,理解了这个,对迭代应该有比较深的理解了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值