亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java N皇后實現問題解析

2019-11-26 16:17:10
字體:
來源:轉載
供稿:網友
N皇后問題是一個典型的約束求解問題,利用遞歸機制,可以很快的得到結果。
N皇后問題的描述:
在一個n*n的棋盤上,擺放n個皇后,要求每個皇后所在行、列、以及兩個對角線上不能出現其他的皇后,否則這些皇后之間將會相互攻擊。如下圖所示。
image
利用遞歸機制,可以很容易的求解n皇后問題。針對八皇后,總共有92種解。下面將給出N-皇后問題的一般求解代碼,在這里代碼是使用java編碼的。
總共設計了三個類,一個是皇后類(Queen),一個棋盤類(Board),一個是求解主程序類(NQueens)。具體代碼如下:
復制代碼 代碼如下:

import java.util.ArrayList;
import java.util.List;
public class NQueens {
private int numSolutions;//求解結果數量
private int queenSize;//皇后的多少
private Board board;//棋盤
private List<Queen> queens = new ArrayList<Queen>();//皇后
//private List<Queen> nQueens = new ArrayList<Queen>();
public NQueens(){
}
public NQueens(int size){
numSolutions = 0;
queenSize = size;
board = new Board(queenSize);
for (int i = 0; i < queenSize; i++) {
Queen queen = new Queen();
queens.add(queen);
}
}
public void solve(){
System.out.println("Start solve....");
putQueen(0);
}
private void putQueen(int index){
int row = index;
//如果此列可用
for (int col = 0; col < board.getQueenSize(); col++) {
if (board.getLayout()[row][col] == 0) {
//將皇后的位置置為此列位置
queens.get(row).setPosition(col);
//然后將相應的位置(此列的正下方以及兩個對角線)加1(即使其不可用)
for (int i = row + 1; i < board.getQueenSize(); i++) {
board.getLayout()[i][col] ++;
if (row + col - i >= 0) {
board.getLayout()[i][row + col - i] ++;
}
if (i + col - row < board.getQueenSize()) {
board.getLayout()[i][i + col - row] ++;
}
}
if (row == board.getQueenSize()-1) {
numSolutions++;
printSolution(numSolutions);
}else {
putQueen(row + 1);
}
//回溯,將相應的位置(此列的正下方以及兩個對角線)減1
for (int i = row + 1; i < board.getQueenSize(); i++) {
board.getLayout()[i][col] --;
if (row + col - i >= 0) {
board.getLayout()[i][row + col - i] --;
}
if (i + col - row < board.getQueenSize()) {
board.getLayout()[i][i + col - row] --;
}
}
}
}
}
//打印求解結果
private void printSolution(int i){
System.out.println("The "+i+ " solution is:");
for (int j = 0; j < board.getQueenSize(); j++) {
for (int k = 0; k < board.getQueenSize(); k++) {
System.out.print(queens.get(j).getPosition() == k ? " * ":" - ");
}
System.out.println();
}
System.out.println();
}
/**
* @param args
*/
public static void main(String[] args) {
//可以改變參數
NQueens nQueens = new NQueens(8);
nQueens.solve();
}
}
import java.io.Serializable;
//皇后類
public class Queen implements Serializable, Cloneable {
/**
*
*/
private static final long serialVersionUID = 7354459222300557644L;
//皇后的位置
private int position;
public Queen(){
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
import java.io.Serializable;
//棋盤類
public class Board implements Serializable,Cloneable {
/**
*
*/
private static final long serialVersionUID = -2530321259544461828L;
//棋盤的大小
private int queenSize;
//棋盤的布局
private int[][] layout;
public Board(int size){
this.queenSize = size;
this.layout = new int[queenSize][queenSize];
//初始化,使棋盤所有位置都可用,即全部置為0
for (int i = 0; i < queenSize; i++) {
for (int j = 0; j < queenSize; j++) {
layout[i][j] = 0;
}
}
}
public int getQueenSize() {
return queenSize;
}
public void setQueenSize(int queenSize) {
this.queenSize = queenSize;
}
public int[][] getLayout() {
return layout;
}
public void setLayout(int[][] layout) {
this.layout = layout;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲男人天堂网站| 亚洲女人天堂av| 久久久久久久国产精品| 92福利视频午夜1000合集在线观看| 成人观看高清在线观看免费| 亚洲第一av网站| 在线观看视频亚洲| 国产99视频精品免视看7| 日本老师69xxx| 国模叶桐国产精品一区| 亚洲黄色www网站| 欧美性猛交xxxx黑人| 精品亚洲一区二区| 久久久之久亚州精品露出| 91av在线视频观看| 在线一区二区日韩| 中文字幕av一区二区三区谷原希美| 亚洲欧美日韩中文视频| 亚洲美女在线视频| 色偷偷av一区二区三区乱| 欧美日韩国产在线播放| 成人国内精品久久久久一区| 欧美精品日韩三级| 亚洲精品大尺度| 青青久久av北条麻妃黑人| 国产成人精品日本亚洲专区61| 社区色欧美激情 | 欧美成人午夜激情| 国产欧美亚洲视频| 欧美一区二区影院| 欧美亚洲视频一区二区| 久久久久这里只有精品| 亚洲午夜国产成人av电影男同| 欧美亚洲国产视频小说| 欧美亚洲在线播放| 日韩欧美国产黄色| 亚洲精品aⅴ中文字幕乱码| 欧美大片免费观看在线观看网站推荐| 黑人巨大精品欧美一区二区三区| 欧美特黄级在线| 亚洲欧洲黄色网| 成人免费自拍视频| 欧美电影免费观看高清| 97超级碰碰人国产在线观看| 欧美电影在线观看网站| 欧美影院成年免费版| 久久视频这里只有精品| 国产精品免费久久久| 成人妇女淫片aaaa视频| 日韩av在线免费观看一区| 精品国产区一区二区三区在线观看| 亚州精品天堂中文字幕| 日韩成人高清在线| 亚洲精品v天堂中文字幕| 欧美在线视频网站| 亚洲欧美在线免费| 国产成人免费av| 97国产成人精品视频| 精品露脸国产偷人在视频| 蜜臀久久99精品久久久无需会员| 川上优av一区二区线观看| 国产视频精品久久久| 国产欧美精品在线| 日韩精品在线视频美女| 91超碰caoporn97人人| 亚洲国产另类久久精品| 日韩在线视频免费观看| 亚洲欧洲国产精品| 一个人www欧美| 一区二区三区视频免费在线观看| 欧美性猛交xxxx| 欧美国产激情18| 亚洲一区二区三区视频播放| 国产精品一区久久| 久久中国妇女中文字幕| 中文字幕日韩av电影| 国产精品久久久久久久av大片| 在线免费看av不卡| 久久精品国产综合| 97国产精品久久| 精品亚洲一区二区三区| 亚洲成年网站在线观看| 成人黄色在线免费| 欧美精品www在线观看| 色爱av美腿丝袜综合粉嫩av| 色噜噜狠狠色综合网图区| 久久久久久国产精品美女| 亚洲丝袜在线视频| 欧美电影电视剧在线观看| 久久久久在线观看| 国产日韩综合一区二区性色av| 国产精品入口免费视| 欧美大全免费观看电视剧大泉洋| 国产日韩在线观看av| 欧美日韩国产中文字幕| 午夜精品久久久久久久99热浪潮| 日韩电影在线观看永久视频免费网站| 夜夜嗨av一区二区三区四区| 欧美成人精品在线观看| 亲爱的老师9免费观看全集电视剧| 国产日韩欧美视频| 中文字幕亚洲综合久久筱田步美| 精品福利樱桃av导航| 亚洲精品短视频| 国产性猛交xxxx免费看久久| 九九热这里只有在线精品视| 成人午夜两性视频| 国内外成人免费激情在线视频网站| 亚洲在线视频观看| 国产亚洲aⅴaaaaaa毛片| 精品中文字幕久久久久久| 69**夜色精品国产69乱| 久久久久久久久国产精品| 91精品视频在线看| 国产精品一区二区女厕厕| 亚洲天堂av在线免费| 色狠狠久久aa北条麻妃| 久久久久久久久国产精品| 欧美巨猛xxxx猛交黑人97人| 久久艹在线视频| 7777精品久久久久久| 亚洲xxxx妇黄裸体| 成人www视频在线观看| 欧美第一黄网免费网站| 亚洲人成网站在线播| 欧美日韩国产黄| 久久91超碰青草是什么| 日韩精品中文字幕在线| 欧美高跟鞋交xxxxhd| 日韩av在线看| 一本色道久久88综合亚洲精品ⅰ| 日韩av片永久免费网站| 中文字幕精品影院| 亚洲精品中文字| 国内精品小视频| 久久久亚洲天堂| 8090成年在线看片午夜| 精品日韩视频在线观看| 91在线看www| 日韩精品亚洲精品| 精品少妇一区二区30p| 日本高清久久天堂| 精品国内自产拍在线观看| 欧美激情中文网| 欧美亚洲视频在线看网址| 久久久亚洲网站| 日韩精品中文字幕在线播放| 亚洲二区中文字幕| 欧美日韩中文字幕在线视频| 国产精品扒开腿做爽爽爽的视频| 91精品在线看| 日韩中文字幕免费看| 久久久在线观看| 欧美精品一区二区三区国产精品| 精品国产一区二区三区久久久| 最近中文字幕mv在线一区二区三区四区| 色在人av网站天堂精品| 亚洲视频欧洲视频| 日韩黄色高清视频| 日韩福利视频在线观看| 日韩在线一区二区三区免费视频| 精品久久久国产| 国产精品中文字幕在线观看| 91在线观看欧美日韩|