国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

廣度優(yōu)先搜索(BFS)

這篇具有很好參考價值的文章主要介紹了廣度優(yōu)先搜索(BFS)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

注意:本內(nèi)容主要是介紹用BFS實現(xiàn)圖的遍歷,所以需要對圖的結(jié)構(gòu)有所了解。

一、什么是BFS?

BFS(Breadth First Search,廣度優(yōu)先搜索,又名寬度優(yōu)先搜索),與深度優(yōu)先算法DFS往一個方向“死磕到底,不撞南墻不回頭”的思維方式不同,廣度優(yōu)先搜索算法關(guān)注的重點在于對每一層結(jié)點進行下一層的訪問。

二、BFS算法介紹

BFS算法和核心思路就是:從某個點一直把其鄰接點走完,然后任選一個鄰接點把與之鄰接的未被遍歷的點走完,如此反復(fù)走完所有結(jié)點。類似于樹的層序遍歷。

所以,BFS的核心就是要把當(dāng)前在哪作為一個狀態(tài)存儲,并將這個狀態(tài)交給隊列進行入隊操作

算法步驟(用隊列實現(xiàn))

a) 訪問指定起始點。

b) 訪問當(dāng)前頂點的鄰接頂點有未被訪問的頂點,并將之放入隊列中。

c) 刪除隊列的隊首節(jié)點。訪問當(dāng)前隊列的隊首,前面的步驟。直到隊列為空。

d) 若途中還有頂點未被訪問,則再選一個點作為起始頂點。重復(fù)前面的步驟(針對非連通圖)。

三.、案例圖示

我們直接上案例進行說明,就本圖而言,其訪問順序可以是:1--2--3--4--5(并不唯一)

廣度優(yōu)先搜索(BFS)

遍歷圖的具體步驟如下:

????????首先從1開始,1結(jié)點處連接著2,3兩個結(jié)點,所以我們先訪問2,3兩個結(jié)點。同時我們把兩個結(jié)點按照訪問順序入隊,比如,選擇2,3為入隊順序,所以之后我們先出隊狀態(tài)2,再來依次訪問結(jié)點2所連接的4,5兩個結(jié)點,同樣的,按照順序入隊4,5結(jié)點,然后操作完狀態(tài)2之后,我們再出隊狀態(tài)3,并依次訪問它的后續(xù),但此時發(fā)現(xiàn)3的后續(xù)結(jié)點已經(jīng)訪問過了,并且檢查發(fā)現(xiàn)所有的結(jié)點都已經(jīng)被訪問完畢,說明遍歷結(jié)束了。最后我們得到圖的遍歷次序:1--2--3--4--5

四、相關(guān)代碼

具體實現(xiàn)遍歷圖的代碼示例:

void BFSL(int pos,pGraph G,int visited[30])//從pos點開始進行廣度優(yōu)先遍歷無向圖
{
    int queue[G->Vnum];//隊列輔助BFS遍歷
    int head=0,tail=0;//隊頭、隊尾指針
    Arcnode* p;
    queue[tail]=pos;
    visited[pos]=1;//標(biāo)記遍歷過
    tail++;
    while(head!=tail)
    {
        pos=queue[head];//出隊操作
        head++;
        printf("%d ",pos);
        p=G->vertice[pos].firstarc;
        while(p!=NULL)
        {
            if(visited[p->adjvex]==0)//判斷是否遍歷過
            {
                queue[tail]=p->adjvex;//入隊操作
                visited[p->adjvex]=1;//標(biāo)記遍歷過
                tail++;
            }
            p=p->next;
        }
    }
}

?我們使用BFS解決問題的一般模板如下:


/**
?* 返回合適的檢索數(shù)據(jù)
?*/
int BFS(Node root, Node target)?
{
? ? Queue<Node> queue; ?//創(chuàng)建隊列
? ? int step = 0; ? ? ? // 當(dāng)前隊列的步驟點
? ? // initialize
? ? add root to queue;
? ? // BFS
? ? while (queue is not empty)?
? ? {
? ? ? ? step = step + 1;
? ? ? ? //步數(shù)逐漸增加
? ? ? ? int size = queue.size();
? ? ? ? for (int i = 0; i < size; ++i)?
? ? ? ? {
? ? ? ? ? ? Node cur = the first node in queue;
? ? ? ? ? ? if cur is target
? ? ? ? ? ? ? ? return step - 1;
? ? ? ? ? ? for (Node next : the neighbors of cur)?
? ? ? ? ? ? {//這里常用一個二維方向數(shù)組實現(xiàn)
? ? ? ? ? ? ? ? add next to queue;
? ? ? ? ? ? }
? ? ? ? ? ? remove the first node from queue;
? ? ? ? }
? ? }
? ? return -1; ? ? ? ? ?//出錯返回值
}

五、BFS的一些應(yīng)用場景

BFS算法的實際應(yīng)用場景:

最典型的有地圖搜索,迷宮尋路等這些需要有“狀態(tài)”以及狀態(tài)改變場景的搜索算法,同時BFS由于不需要像DFS算法那樣回溯,所以效率可能會比DFS更高一些。文章來源地址http://www.zghlxwxcb.cn/news/detail-405537.html

到了這里,關(guān)于廣度優(yōu)先搜索(BFS)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 295.【華為OD機試】智能駕駛( 廣度優(yōu)先搜索(BFS)Java&Python&C++&JS實現(xiàn))

    ??點擊這里可直接跳轉(zhuǎn)到本專欄,可查閱頂置最新的華為OD機試寶典~ 本專欄所有題目均包含優(yōu)質(zhì)解題思路,高質(zhì)量解題代碼(JavaPythonC++JS分別實現(xiàn)),詳細(xì)代碼講解,助你深入學(xué)習(xí),深度掌握!

    2024年03月11日
    瀏覽(21)
  • 深度優(yōu)先搜索(DFS、深搜)和廣度優(yōu)先搜索(BFS、廣搜)

    深度優(yōu)先搜索(DFS、深搜)和廣度優(yōu)先搜索(BFS、廣搜)

    目錄 深度優(yōu)先搜索(DFS、深搜)和廣度優(yōu)先搜索(BFS、廣搜) 深度優(yōu)先搜索(簡稱“深搜”或DFS) 廣度優(yōu)先搜索 總結(jié) 深度優(yōu)先生成樹和廣度優(yōu)先生成樹 非連通圖的生成森林 深度優(yōu)先生成森林 廣度優(yōu)先生成森林 圖 1 無向圖 深度優(yōu)先搜索的過程類似于樹 的先序遍歷 ,首先

    2024年01月20日
    瀏覽(21)
  • 261.【華為OD機試真題】跳馬(廣度優(yōu)先搜索(BFS)-Java&Python&C++&JS實現(xiàn))

    ??點擊這里可直接跳轉(zhuǎn)到本專欄,可查閱頂置最新的華為OD機試寶典~ 本專欄所有題目均包含優(yōu)質(zhì)解題思路,高質(zhì)量解題代碼(JavaPythonC++JS分別實現(xiàn)),詳細(xì)代碼講解,助你深入學(xué)習(xí),深度掌握!

    2024年02月20日
    瀏覽(20)
  • 深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS),用代碼講原理

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS),用代碼講原理

    以圖文的形式對深度搜索和廣度搜索的理論進行講解時,可能會對一些概念有些模糊,且不太清楚怎么把該理論用程序的方式進行復(fù)現(xiàn)并解決這一搜索問題(這說的就是本人) 。所以后面我看完了一份實現(xiàn)這兩種搜索方法的代碼,在這做一個筆記,希望對大家有所幫助。 兩

    2024年04月12日
    瀏覽(20)
  • Python 算法基礎(chǔ)篇:深度優(yōu)先搜索( DFS )和廣度優(yōu)先搜索( BFS )

    Python 算法基礎(chǔ)篇:深度優(yōu)先搜索( DFS )和廣度優(yōu)先搜索( BFS )

    深度優(yōu)先搜索( DFS )和廣度優(yōu)先搜索( BFS )是兩種常用的圖遍歷算法,用于在圖中搜索目標(biāo)節(jié)點或遍歷圖的所有節(jié)點。本篇博客將介紹 DFS 和 BFS 算法的基本概念,并通過實例代碼演示它們的應(yīng)用。 ???? ?? ?? ?? 深度優(yōu)先搜索( DFS )是一種用于遍歷或搜索圖或樹

    2024年02月07日
    瀏覽(53)
  • 深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)兩種算法c++

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)兩種算法c++

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)是一種用于遍歷或搜索樹圖的一種算法,在這個過程中保證圖或數(shù)的每個結(jié)點被訪問且僅被訪問一次,再按照每個結(jié)點訪問的順序不同分為深搜和廣搜。 本文只討論這兩種算法在搜索方面的應(yīng)用! 深度優(yōu)先搜索 ( Depth-First-Search,DFS )它 沿

    2024年02月13日
    瀏覽(20)
  • C++:第十三講BFS廣度優(yōu)先搜索

    C++:第十三講BFS廣度優(yōu)先搜索

    今天帶領(lǐng)大家學(xué)一下BFS。 DFS可以看——C++:第十二講DFS深搜(二)_c++匿名函數(shù)dfs-CSDN博客 廣度優(yōu)先搜索(breadth-first search,縮寫為bfs)又名寬度優(yōu)先搜索,是最簡便的圖的搜索算法之一,這一算法也是很多重要的圖的算法的原型。其別名又叫BFS,屬于一種盲目搜尋法,目的是

    2024年01月25日
    瀏覽(20)
  • 1432 - 走出迷宮的最少步數(shù)-廣度優(yōu)先搜索BFS
  • 圖的遍歷——深度優(yōu)先搜索(DFS)與廣度優(yōu)先搜索(BFS)(附帶C語言源碼)

    圖的遍歷——深度優(yōu)先搜索(DFS)與廣度優(yōu)先搜索(BFS)(附帶C語言源碼)

    個人主頁:【??個人主頁】 系列專欄:【??數(shù)據(jù)結(jié)構(gòu)與算法】 學(xué)習(xí)名言:天子重英豪,文章教兒曹。萬般皆下品,惟有讀書高——《神童詩勸學(xué)》 第一章 ?? 學(xué)前知識 第二章 ?? 單向鏈表 第三章 ?? 遞歸 … 在此之前我們學(xué)習(xí)過了圖的一些基本概念,如同在二叉樹

    2024年02月06日
    瀏覽(20)
  • 圖的遍歷(搜索)算法(深度優(yōu)先算法DFS和廣度優(yōu)先算法BFS)

    圖的遍歷(搜索)算法(深度優(yōu)先算法DFS和廣度優(yōu)先算法BFS)

    從圖的某個頂點出發(fā)訪問遍圖中所有頂點,且每個頂點僅被訪問一次。(連通圖與非連通圖) 1、訪問指定的起始頂點; 2、若當(dāng)前訪問的頂點的鄰接頂點有未被訪問的,則任選一個訪問之;反之,退回到最近訪問過的頂點;直到與起始頂點相通的全部頂點都訪問完畢; 3、若

    2024年01月17日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包