一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java使用遞歸回溯完美解決八皇后的問題

Java使用遞歸回溯完美解決八皇后的問題

2022-03-10 13:42葉綠體不忘呼吸 Java教程

這篇文章主要介紹了Java基于循環遞歸回溯實現八皇后問題算法,結合具體實例形式分析了java的遍歷、遞歸、回溯等算法實現八皇后問題的具體步驟與相關操作技巧,需要的朋友可以參考下

八皇后問題

八皇后問題,是一個古老而著名的問題,是回溯算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾于1848年提出:在8X8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即:任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。

解決思路

①第一個皇后先放第一行第一列。

②第二個皇后放在第二行第一列、然后判斷是否OK,如果不0K, 繼續放在第二列、第三列、依次把所有列都放完,找到一個合適。

③繼續第三個皇后, 還是第一列、第二列…直到第8個皇后也能放在一個不沖突的位置,算是找到了一個正確解。

④當得到一個正確解時,在棧回退到上一個棧時,就會開始回溯,即將第一個皇后,放到第一列的所有正確解,全部得到。

⑤然后回頭繼續第-一個皇后放第二列,后面繼續循環執行①②③④的步驟。

代碼實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
 * @Author: Yeman
 * @Date: 2021-10-31-15:48
 * @Description:
 */
public class Queue8 {
    int max = 8; //8個皇后
    int[] arr = new int[max]; //下標為第幾個(即第幾行),值為第幾列
    static int count = 0; //多少個放法
    static int judgeCount = 0; //判斷了多少次
 
    public static void main(String[] args) {
        Queue8 queue8 = new Queue8();
        queue8.check(0);
        System.out.printf("一共有%d種解法\n",count);
        System.out.printf("一共判斷了%d次",judgeCount);
    }
 
    //用來放置第n個皇后
    private void check(int n){
        if (n == max){ //n為8相當于是第九個皇后了,說明已經全部放好了
            print();
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            arr[n] = i;
            if (judge(n)){ //不沖突
                check(n+1);
            }
        }
    }
 
    //用來第n個皇后判斷與前面的所有皇后是否沖突
    private boolean judge(int n){
        judgeCount++;
        for (int i = 0; i < n; i++) {
            //是否同列同斜線
            if (arr[i] == arr[n] || Math.abs(arr[i]-arr[n]) == Math.abs(i-n)){
                return false;
            }
        }
        return true;
    }
 
    //輸出每一種放法
    private void print(){
        count++;
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
}

運行結果

(截取部分)

Java使用遞歸回溯完美解決八皇后的問題

到此這篇關于Java使用遞歸回溯完美解決八皇后的問題的文章就介紹到這了,更多相關Java 遞歸回溯內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/m0_46653805/article/details/121065552

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲色影 | 2020年国产精品午夜福利在线观看 | 白丝捆绑调教 | 免费特黄一区二区三区视频一 | 国产免费久久精品44 | 福利视频一区二区三区 | 亚州在线 | 我的青梅竹马是消防员2季未增删免费 | 亚洲国产在线观看免费视频 | 成人在线日韩 | 好男人资源免费观看 | 啪啪导航| 国产精品久久久久aaaa | 免费看a片毛片 | 激情涩涩| 欧美艳星kagney1ynn | 波多野结衣之双方调教在线观看 | 国产理论片在线观看 | 校花在公车上被内射好舒 | 精品99一区二区三区麻豆 | 天天摸日日舔 | 18捆绑调教在线高清 | avtt天堂网 手机资源 | 国产一区风间由美在线观看 | 国产精品天天影视久久综合网 | 日本国产最新一区二区三区 | 日本视频在线观看播放 | 互换身体全集免费观看 | 窝窝午夜精品一区二区 | 亚洲人成伊人成综合网久久 | 女娃开嫩苞经历小说 | 亚洲精品国产精麻豆久久99 | 日韩夫妻性生活 | 亚洲 日韩 国产 中文视频 | 校花小雪灌满了男人们的浓浆 | 亚洲精品一区二区久久这里 | 成人伊人亚洲人综合网站222 | 白鹿扒开内裤露出尿孔 | 欧美大片一区二区三区 | 北海市副市长黄江老公 | 国产福利兔女郎在线观看 |