著名的八皇后问题
来源:互联网 发布:mac电脑控制安卓手机 编辑:程序博客网 时间:2024/05/18 17:03
package com.zhang.csdn;import java.io.File;import java.io.FileWriter;import java.io.IOException;class EightQueen {private static int total = 0;private final static int EIGHT_QUEEN_ROW = 8;private final static int EIGHT_QUEEN_COLUMN = 8; private final static String RESULT_FILE_DISK = "E:";private final static String RESULT_FILE_NAME = "EightQueen.txt";private final static char RESULT_OTHER_CHAR = '*';private final static char RESULT_QUEEN_CHAR = 'Q';private final static String RESULT_LINE_SEPARATOR = "\r\n";private final static String RESULT_EACH_SEPARATOR = "\r\n";private final int[] column = new int[EIGHT_QUEEN_ROW];private StringBuffer result = new StringBuffer();public void execute() {this.initColumn();this.permute(0);this.displayResult();}private void displayResult() { System.out.println("total : " + total);this.writeToFile(this.result);}private void initColumn() {for (int i = 0; i < EIGHT_QUEEN_ROW; i++) {column[i] = i;}}private void permute(int index) {if (index == EIGHT_QUEEN_ROW) {if (isValid()) {print();total++;}} else {for (int i = index; i < EIGHT_QUEEN_ROW; i++) {swap(i, index);permute(index + 1);swap(i, index);}}}private void print() {this.appendToResult();}private StringBuffer eachLine(int rowIndex) { StringBuffer line = new StringBuffer(EIGHT_QUEEN_COLUMN); for (int columnIndex = 0; columnIndex < EIGHT_QUEEN_COLUMN; columnIndex++) { line.append( (column[rowIndex] != columnIndex ? EightQueen.RESULT_OTHER_CHAR : EightQueen.RESULT_QUEEN_CHAR) ); } return line.append(EightQueen.RESULT_LINE_SEPARATOR);}private void appendToResult() { StringBuffer singleAnswer = new StringBuffer(); for (int rowIndex = 0; rowIndex < EIGHT_QUEEN_ROW; rowIndex++) { singleAnswer.append(eachLine(rowIndex)); } result.append(singleAnswer).append(EightQueen.RESULT_EACH_SEPARATOR);}private static void writeToFile(StringBuffer sb) { FileWriter writer = null; try { File file = new File( EightQueen.RESULT_FILE_DISK + File.separator + EightQueen.RESULT_FILE_NAME); if (!file.exists()) { file.createNewFile(); } writer = new FileWriter(file); writer.write(sb.toString()); writer.flush(); writer.close(); } catch(Exception e) { e.printStackTrace(); } finally { }}private void swap(int i, int j) {int temp = column[i];column[i] = column[j];column[j] = temp;}private boolean isValid() {for (int firstLayer = 0; firstLayer < EIGHT_QUEEN_COLUMN; firstLayer++) {for (int secondLayer = firstLayer + 1; secondLayer < EIGHT_QUEEN_COLUMN; secondLayer++) {if ( ((firstLayer - secondLayer) == (column[firstLayer] - column[secondLayer])) || ((firstLayer - secondLayer) == (column[secondLayer] - column[firstLayer])) ) {return false;}}}return true;}}
0 0
- 著名的八皇后问题
- 八皇后的问题
- 八皇后的问题
- 八皇后的问题
- 八皇后、N皇后问题的求解。
- 八皇后问题的实现
- 八皇后问题的解法
- 八皇后问题的并行
- 扩展的八皇后问题
- 谈谈八皇后的问题
- 八皇后问题的实现
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- 由八皇后问题到n皇后的推广
- 基于八皇后上的N皇后问题
- 八皇后问题的java实现
- 八皇后问题的C#解答
- 八皇后问题动态图形的实现
- mac命令笔记
- HOG特征分析
- 输出字符串的所有全排列(递归法和非递归,非递归采用组合数学的字典序)
- 如何使编写的java程序在hadoop 2.2中运行的完整过程
- GMGridView扩展心得
- 著名的八皇后问题
- 一步一步在OEL5.5 64位Linux上安装Oracle 10gR2 RAC(4)
- Android 4.0 Launcher2源码分析——Launcher内容加载详细过程
- Copy List with Random Pointer
- ZOJ 1992 Sightseeing Tour
- 一步一步在OEL5.5 64位Linux上安装Oracle 10gR2 RAC(5)
- 树状视图拖放实现
- 字节对齐
- cocos2d-x quick 导出c++到Lua