package com.kingdz.algorithm.time201704;
/**
* 八皇后问题,非递归
*
* @author kingdz
*
*/
public class Algo27 {
static int MAX_QUEUE = 8;
public static void main(String[] args) {
Algo26.MAX_QUEUE = MAX_QUEUE;
int[] queens = new int[MAX_QUEUE];
queen(queens);
}
private static void queen(int[] queens) {
int row = 0;
int col = 0;
// 首先判断所有的行
while (row < MAX_QUEUE) {
// 判断所有的列
while (col < MAX_QUEUE) {
queens[row] = col + 1;
// 判断第row行的皇后是否合法
if (Algo26.isValid(row, queens)) {
// 如果合法,则判断下一行第一列的皇后
col = 0;
break;
} else {
// 如果不合法,则将该row行的皇后设置为空
queens[row] = 0;
// 判断下一列的皇后
col++;
}
}
// 如果该行没有合法的皇后
if (queens[row] == 0) {
// 如果已经是第一行则程序退出
if (row == 0) {
break;
} else {
// 判断前一行的合法皇后
row--;
// 列的起始计数为上一行结束的位置
col = queens[row];
// 将上一行的皇后设置为空
queens[row] = 0;
continue;
}
}
// 如果已经进行到最后一行
if (row == MAX_QUEUE - 1) {
// 则输出结果
Algo26.output(queens);
// 寻转该行下一列开始的合法皇后
col = queens[row] + 1;
// 将该行设置为空
queens[row] = 0;
continue;
}
row++;
}
}
}
【算法】程序猿不写代码是不对的46
最新推荐文章于 2023-12-24 16:00:47 发布