日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】求解N皇后问题

發布時間:2025/3/15 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】求解N皇后问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼實現:

import java.util.Scanner;public class Queen {/*** 定義皇后的位置向量*/int[] queue;/*** 定義皇后數*/int queueNum;public Queen(int queueNum) {this.queueNum = queueNum;this.queue = new int[queueNum];//根據皇后數初始化皇后位置向量for (int i = 0; i < queueNum; i++) {queue[i] = -1;}}public void getPlaceQueenSolutions() {//當前擺放的皇后,0<=k<nint k = 0;//解決方案個數int solutionNum = 0;//擺放皇后kwhile(k >= 0) {//在下一列擺放皇后kqueue[k]++;//發生沖突while(queue[k] < queueNum && place(k) == 1) {//皇后k探測下一列queue[k]++;}//得到一個解,輸出if (queue[k] < queueNum && k == queueNum-1) {System.out.println("第" + ++solutionNum + "個解是:");//打印n皇后問題的一個解(queue 1, queue 2, ..., queue n)for (int i = 0; i < queueNum; i++) {System.out.print(queue[i] + 1 + " ");}System.out.println();//尚有皇后未擺放} else if (queue[k] < queueNum && k < queueNum-1) {//準備擺放下一個皇后k++;} else {//重置x[k],回溯,重新擺放皇后kqueue[k--] = -1;}}}/*** 考察皇后k在x[k]列是否發生沖突* @param k* @return*/private int place(int k) {for (int i = 0; i < k; i++) {//違反約束條件if (queue[i] == queue[k] || Math.abs(i-k) == Math.abs(queue[i]-queue[k])) {return 1;}}return 0;}public static void main(String[] args) {System.out.println("請輸入皇后個數:");Scanner scanner = new Scanner(System.in);int k = Integer.parseInt(scanner.nextLine());new Queen(k).getPlaceQueenSolutions();scanner.close();}}

比如輸入8,即有名的“八皇后問題”,解為92個
結果如下:

1個解是: 1 5 8 6 3 7 2 42個解是: 1 6 8 3 7 4 2 53個解是: 1 7 4 6 8 2 5 34個解是: 1 7 5 8 2 4 6 35個解是: 2 4 6 8 3 1 7 56個解是: 2 5 7 1 3 8 6 47個解是: 2 5 7 4 1 8 6 38個解是: 2 6 1 7 4 8 3 59個解是: 2 6 8 3 1 4 7 510個解是: 2 7 3 6 8 5 1 411個解是: 2 7 5 8 1 4 6 312個解是: 2 8 6 1 3 5 7 413個解是: 3 1 7 5 8 2 4 614個解是: 3 5 2 8 1 7 4 615個解是: 3 5 2 8 6 4 7 116個解是: 3 5 7 1 4 2 8 617個解是: 3 5 8 4 1 7 2 618個解是: 3 6 2 5 8 1 7 419個解是: 3 6 2 7 1 4 8 520個解是: 3 6 2 7 5 1 8 421個解是: 3 6 4 1 8 5 7 222個解是: 3 6 4 2 8 5 7 123個解是: 3 6 8 1 4 7 5 224個解是: 3 6 8 1 5 7 2 425個解是: 3 6 8 2 4 1 7 526個解是: 3 7 2 8 5 1 4 627個解是: 3 7 2 8 6 4 1 528個解是: 3 8 4 7 1 6 2 529個解是: 4 1 5 8 2 7 3 630個解是: 4 1 5 8 6 3 7 231個解是: 4 2 5 8 6 1 3 732個解是: 4 2 7 3 6 8 1 533個解是: 4 2 7 3 6 8 5 134個解是: 4 2 7 5 1 8 6 335個解是: 4 2 8 5 7 1 3 636個解是: 4 2 8 6 1 3 5 737個解是: 4 6 1 5 2 8 3 738個解是: 4 6 8 2 7 1 3 539個解是: 4 6 8 3 1 7 5 240個解是: 4 7 1 8 5 2 6 341個解是: 4 7 3 8 2 5 1 642個解是: 4 7 5 2 6 1 3 843個解是: 4 7 5 3 1 6 8 244個解是: 4 8 1 3 6 2 7 545個解是: 4 8 1 5 7 2 6 346個解是: 4 8 5 3 1 7 2 647個解是: 5 1 4 6 8 2 7 348個解是: 5 1 8 4 2 7 3 649個解是: 5 1 8 6 3 7 2 450個解是: 5 2 4 6 8 3 1 751個解是: 5 2 4 7 3 8 6 152個解是: 5 2 6 1 7 4 8 353個解是: 5 2 8 1 4 7 3 654個解是: 5 3 1 6 8 2 4 755個解是: 5 3 1 7 2 8 6 456個解是: 5 3 8 4 7 1 6 257個解是: 5 7 1 3 8 6 4 258個解是: 5 7 1 4 2 8 6 359個解是: 5 7 2 4 8 1 3 660個解是: 5 7 2 6 3 1 4 861個解是: 5 7 2 6 3 1 8 462個解是: 5 7 4 1 3 8 6 263個解是: 5 8 4 1 3 6 2 764個解是: 5 8 4 1 7 2 6 365個解是: 6 1 5 2 8 3 7 466個解是: 6 2 7 1 3 5 8 467個解是: 6 2 7 1 4 8 5 368個解是: 6 3 1 7 5 8 2 469個解是: 6 3 1 8 4 2 7 570個解是: 6 3 1 8 5 2 4 771個解是: 6 3 5 7 1 4 2 872個解是: 6 3 5 8 1 4 2 773個解是: 6 3 7 2 4 8 1 574個解是: 6 3 7 2 8 5 1 475個解是: 6 3 7 4 1 8 2 576個解是: 6 4 1 5 8 2 7 377個解是: 6 4 2 8 5 7 1 378個解是: 6 4 7 1 3 5 2 879個解是: 6 4 7 1 8 2 5 380個解是: 6 8 2 4 1 7 5 381個解是: 7 1 3 8 6 4 2 582個解是: 7 2 4 1 8 5 3 683個解是: 7 2 6 3 1 4 8 584個解是: 7 3 1 6 8 5 2 485個解是: 7 3 8 2 5 1 6 486個解是: 7 4 2 5 8 1 3 687個解是: 7 4 2 8 6 1 3 588個解是: 7 5 3 1 6 8 2 489個解是: 8 2 4 1 7 5 3 690個解是: 8 2 5 3 1 7 4 691個解是: 8 3 1 6 2 5 7 492個解是: 8 4 1 3 6 2 7 5

總結

以上是生活随笔為你收集整理的【Java】求解N皇后问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。