亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java圖搜索算法之DFS與BFS詳解

 更新時(shí)間:2021年11月09日 08:56:40   作者:愛(ài)敲代碼的小黃  
這篇文章主要為大家介紹了java數(shù)據(jù)結(jié)構(gòu)中可以秒殺一切圖算法的DFS與BFS作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助

你好,我是小黃,一名獨(dú)角獸企業(yè)的Java開(kāi)發(fā)工程師。
感謝茫茫人海中我們能夠相遇,
俗話說(shuō):當(dāng)你的才華和能力,不足以支撐你的夢(mèng)想的時(shí)候,請(qǐng)靜下心來(lái)學(xué)習(xí),
希望優(yōu)秀的你可以和我一起學(xué)習(xí),一起努力,實(shí)現(xiàn)屬于自己的夢(mèng)想。

一、前言

上一篇文章我們提到了關(guān)于圖的形象化描述方法,不知道大家還有沒(méi)有印象。沒(méi)有印象的話,可以去看一下上期的內(nèi)容

對(duì)于圖來(lái)說(shuō),搜索的方法無(wú)外乎兩種,深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)

兩種搜索算法也不太相同,今天我們就來(lái)看一下這兩個(gè)搜索算法

二、深度優(yōu)先搜索

我們一提到深度優(yōu)先搜索,腦子里第一時(shí)間想到的就是遞歸

沒(méi)錯(cuò),深搜就是依靠遞歸的方法來(lái)進(jìn)行的搜索,我們來(lái)看一個(gè)例題:

在這里插入圖片描述

對(duì)于上圖來(lái)說(shuō),使用深度優(yōu)先搜索的路線為:0 -> 3 - > 2 -> 4 -> 5 -> 1

這里不懂深搜的小伙伴可以看下這篇:深度優(yōu)先搜索

遞歸版本:

	/**
     * 深度優(yōu)先搜索
     * 
     * @param node
     * @param set
     */
	public void DFS(Node node, Set<Node> set) {
        if (node == null) {
            return;
        }
        if (!set.contains(node)) {
            set.add(node);
            System.out.print(node.value + " ");
            for (Node node1 : node.nexts) {
                DFS(node1, set);
            }
        }
    }

迭代版本:

	/**
     * 深度優(yōu)先搜索
     *
     * @param node
     */
	public void DFS(Node node) {
        Stack<Node> stack = new Stack<>();
        Set<Node> set = new HashSet<>();
        stack.add(node);
        set.add(node);
        System.out.print(node.value + " ");
        while (!stack.isEmpty()) {
            Node cur = stack.pop();
            for (Node next : cur.nexts) {
                if (!set.contains(next)) {
                    stack.add(cur); // 用來(lái)做記憶化的
                    stack.add(next);
                    System.out.print(next.value + " ");
                    set.add(next);
                    break;
                }
            }
        }
    }

測(cè)試結(jié)果:

迭代版本:
0 3 2 4 5 1
遞歸版本:
0 3 2 4 5 1

三、廣度優(yōu)先搜索

對(duì)于廣度優(yōu)先搜索的話,簡(jiǎn)單的來(lái)說(shuō),像走地圖一樣,一圈一圈的擴(kuò)展開(kāi)來(lái)

我們來(lái)看一個(gè)例題:

在這里插入圖片描述

對(duì)于上圖來(lái)說(shuō),使用深度優(yōu)先搜索的路線為:0 -> 3 -> 1 -> 2 -> 4 -> 5

這里不懂廣搜的小伙伴可以看下這篇:廣度優(yōu)先搜索

	/**
     * 廣度優(yōu)先搜索
     *
     * @param node
     */
    public static void BFS(Node node) {
        if (node == null) {
            return;
        }
        Queue<Node> queue = new LinkedList<>();
        // 代表是否被使用
        Set<Node> set = new HashSet<>();
        queue.add(node);
        set.add(node);
        while (!queue.isEmpty()) {
            Node cur = queue.poll();
            System.out.print(cur.value + " ");
            for (Node next : cur.nexts) {
                if (!set.contains(next)) {
                    queue.add(next);
                    set.add(next);
                }
            }
        }
    }

四、結(jié)語(yǔ)

這期的深度優(yōu)先搜索和廣度優(yōu)先搜索比較簡(jiǎn)單

讓你對(duì)圖的搜索大概有個(gè)了解,下幾期將會(huì)講解一些真實(shí)的算法

在算法題中,題目不會(huì)單純的讓你求深搜和廣搜,經(jīng)常會(huì)和別的一起出現(xiàn),比如最小生成樹(shù)等

以上就是java數(shù)據(jù)結(jié)構(gòu)圖算法之DFS與BFS詳解的詳細(xì)內(nèi)容,更多關(guān)于java數(shù)據(jù)結(jié)構(gòu)圖算法DFS與BFS的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java怎么連接并訪問(wèn)activemq

    java怎么連接并訪問(wèn)activemq

    這篇文章主要介紹了java怎么連接并訪問(wèn)activemq,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 解決spring data redis的那些坑

    解決spring data redis的那些坑

    這篇文章主要介紹了spring data redis的那些坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • MyBatis關(guān)聯(lián)查詢(xún)的實(shí)現(xiàn)

    MyBatis關(guān)聯(lián)查詢(xún)的實(shí)現(xiàn)

    MyBatis可以通過(guò)定義多個(gè)表的關(guān)聯(lián)關(guān)系,實(shí)現(xiàn)多表查詢(xún),本文主要介紹了MyBatis關(guān)聯(lián)查詢(xún)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Java在指定路徑上創(chuàng)建文件提示不存在解決方法

    Java在指定路徑上創(chuàng)建文件提示不存在解決方法

    在本篇文章里小編給大家整理的是一篇關(guān)于Java在指定路徑上創(chuàng)建文件提示不存在解決方法,有需要的朋友們可以參考下。
    2020-02-02
  • Java的SpringMVC中控制器返回XML數(shù)據(jù)問(wèn)題

    Java的SpringMVC中控制器返回XML數(shù)據(jù)問(wèn)題

    這篇文章主要介紹了Java的SpringMVC中控制器返回XML數(shù)據(jù)問(wèn)題,控制器是處理HTTP請(qǐng)求的組件,它們接收來(lái)自客戶端的請(qǐng)求,并將其轉(zhuǎn)換為適當(dāng)?shù)捻憫?yīng),這些響應(yīng)可以是動(dòng)態(tài)生成的?HTML?頁(yè)面,也可以是JSON或XML格式的數(shù)據(jù),需要的朋友可以參考下
    2023-07-07
  • Java8中新判空方法之Optional類(lèi)的使用詳解

    Java8中新判空方法之Optional類(lèi)的使用詳解

    Opitonal類(lèi)就是Java提供的為了解決大家平時(shí)判斷對(duì)象是否為空用的。本文將通過(guò)示例為大家講解一下Optional類(lèi)的使用,感興趣的可以收藏一下
    2022-12-12
  • 使用java實(shí)現(xiàn)云端資源共享小程序的代碼

    使用java實(shí)現(xiàn)云端資源共享小程序的代碼

    這篇文章主要介紹了用java寫(xiě)一個(gè)云端資源共享小程序,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java使用poi生成excel的步驟

    java使用poi生成excel的步驟

    2010以上格式使用XSSFWorkBook對(duì)象, 2003格式使用HSSFWorkBook對(duì)象, 其他對(duì)象操作基本一樣,本文重點(diǎn)給大家介紹java使用poi生成excel的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-04-04
  • 解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯(cuò)問(wèn)題

    解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • 如何用idea數(shù)據(jù)庫(kù)編寫(xiě)快遞e站

    如何用idea數(shù)據(jù)庫(kù)編寫(xiě)快遞e站

    這篇文章主要介紹了如何用idea數(shù)據(jù)庫(kù)編寫(xiě)快遞e站,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01

最新評(píng)論