八皇后

对皇后问题给出一种解决方案. 算法是《算法分析与设计分析》教材上的. 要列举所有方案,还需自己改进!
 
 
package data_structure;

public class EightQueens {

	private static final int NumberOfQueen = 8; 
	private static int [] queens = new int[NumberOfQueen + 1];
	public static void main(String[] args) {
		getQueenLoaction();
		printQueens();
	}

	// 打印计算结果.
	private static void printQueens() {
		for (int i=1; i<queens.length; ++i) {
			System.out.print(queens[i] + " ");
		}
		System.out.println();
	}
	// 计算皇后的位置.
	private static void getQueenLoaction() {
		int k = 1;
		queens[1] = 0;
		while (k > 0) {
			queens[k] += 1;
			while ((queens[k] <= NumberOfQueen) && (!isQueenKOk(k)))
				queens[k] += 1;
			if (queens[k] <= NumberOfQueen) {
				if (k == NumberOfQueen) break;
				else {
					k += 1;
					queens[k] = 0;
				}
			}
			else {
				queens[k] = 0;
				k -= 1;
			}
		}
	}
	// 判断第 k 个皇后的位置(列标)是否 Ok.
	private static boolean isQueenKOk(int k) {
		for (int i=1; i<k; ++i) {
			// 如果发现 第 k 个皇后的列标与前面的第 i 个皇后的列表相同; 或者与第 i 个的斜率是 +1 或 -1, 那么返回false, 表示第 k 个元素的位置不Ok.
			// 否则, 第 k 个皇后的位置 Ok.
			if ((queens[i] == queens[k]) || (Math.abs(queens[i]-queens[k]) == Math.abs(i - k)))
				return false;
		}
		return true;
	}

}




你可能感兴趣的:(算法,String,Class)