麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Java > 正文

java N皇后實(shí)現(xiàn)問(wèn)題解析

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

import java.util.ArrayList;
import java.util.List;
public class NQueens {
private int numSolutions;//求解結(jié)果數(shù)量
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);
//然后將相應(yīng)的位置(此列的正下方以及兩個(gè)對(duì)角線)加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);
}
//回溯,將相應(yīng)的位置(此列的正下方以及兩個(gè)對(duì)角線)減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] --;
}
}
}
}
}
//打印求解結(jié)果
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) {
//可以改變參數(shù)
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();
}
}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 羞羞草视频 | 亚洲午夜免费电影 | 羞羞电影在线观看www | 久草视频手机在线观看 | 91久久久久久久久久久久久 | 99视频有精品视频高清 | 草莓视频久久 | 国产福利视频在线观看 | 久久精品视频黄色 | 成人三级黄色片 | 日日噜噜噜夜夜狠狠久久蜜桃 | 欧洲成人在线视频 | 国产91丝袜在线播放 | 毛片视频免费播放 | 亚洲aⅴ在线观看 | 欧美aⅴ在线观看 | 久久超 | 久久国产精品久久久久久电车 | wwwav国产 | 一级片999 | 亚洲欧美一区二区三区在线观看 | 粉嫩一区| 日本一区二区高清不卡 | 毛片免费在线播放 | 99国产精成人午夜视频一区二区 | 最近高清无吗免费看 | 久久精品一区二区三区四区五区 | 麻豆传传媒久久久爱 | 国产精品久久久免费 | 精品欧美一区二区精品久久 | 久久精品a一级国产免视看成人 | 成人性视频在线 | 99精品视频免费看 | 姑娘第5集高清在线观看 | 蜜桃视频在线播放 | 91短视频在线 | 成人福利在线看 | 欧美一级毛片欧美一级成人毛片 | 精品欧美一区二区精品久久 | 免费国产一级淫片 | 性大片免费看 |