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

圖的二種遍歷-廣度優(yōu)先遍歷和深度優(yōu)先遍歷

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

圖的廣度優(yōu)先遍歷

1.樹的廣度優(yōu)先遍歷

這樣一個圖中,是如何實現(xiàn)廣度優(yōu)先遍歷的呢,首先,從1遍歷完成之后,在去遍歷2,3,4,最后遍歷5 ,6 , 7? , 8。這也就是為什么叫做廣度優(yōu)先遍歷,是一層一層的往廣的遍歷

firstneighbor(g,v),數(shù)據(jù)結(jié)構(gòu),王道數(shù)據(jù)結(jié)構(gòu),深度優(yōu)先,寬度優(yōu)先,算法

不存在“回路”,搜索相鄰的結(jié)點時,不可能搜到已經(jīng)訪問過的結(jié)點


樹的廣度優(yōu)先遍歷(層序遍歷)

①若樹非空,則根節(jié)點入隊


②若隊列非空,隊頭元素出隊并訪問,同時將該元素的孩子依次入隊

③重復(fù)②直到隊列為空

2.圖的廣度優(yōu)先遍歷

圖的廣度優(yōu)先和樹的廣度優(yōu)先還是非常相似的,首先我們假設(shè)我們從?2?號結(jié)點開始,然后廣度優(yōu)先遍歷 1 ,? 6 (這里面1和6的順序無所謂,但是還是為了保持一定的順序,一般從小的開始)然后1的話再遍歷就是5 , 6再找相鄰的就是 3 和 7 ,于是訪問的就是 5 ,3? ,7 。在找到下一層就是 4 ,8 。

firstneighbor(g,v),數(shù)據(jù)結(jié)構(gòu),王道數(shù)據(jù)結(jié)構(gòu),深度優(yōu)先,寬度優(yōu)先,算法

廣度優(yōu)先遍歷(Breadth-First-Search, BFS)要點:

1.找到與一個頂點相鄰的所有頂點·
2、標(biāo)記哪些頂點被訪問過
3.需要一個輔助隊列


FirstNeighbor(G,x):求圖G中頂點x的第一個鄰接點,若有則返回頂點號。若x沒有鄰接點或圖中不存在x,則返回-1。
NextNeighbor(G,x,y)︰假設(shè)圖G中頂點y是頂點x的一個鄰接點,返回除y之外頂點x的下一個鄰接點的頂點號,若y是x的最后一個鄰接點,則返回-1。
?

代碼

bool visited [MAX_VERTEX_NUM];/訪問標(biāo)記數(shù)組

//廣度優(yōu)先遍歷
void BFS( Graph G,int v){//從頂點v出發(fā),廣度優(yōu)先遍歷圖G
	visit(v);	//訪問初始頂點v
	
	visited [v]=TRUE;	//對v做已訪問標(biāo)記
	
	Enqueue(Q,v);     //頂點v入隊列Q
	
	while( !isEmpty(Q) ){
	DeQueue(Q, v);    //頂點v出隊列
	for(w=FirstNeighbor(G,v ) ;w>= ;  w=NextNeighbor(G,v,w))
	//檢測v所有鄰接點
	if( !visited [w] )//w為v的尚未訪問的鄰接頂點
	{
	   visit(w);//訪問頂點w
	   visited [w]=TRUE;//對w做已訪問標(biāo)記
	   EnQueue(Q,w);//頂點w入隊列

	}
}

按照上面的例子,首先

我們先遍歷到 2 ,2 放到隊列,如果隊列不空,把 1 和 6 放到隊尾,然后 1號出隊,和 1號鄰的為

5和 2 ,由于 2被visit了所以訪問未被訪問的結(jié)點5,5號結(jié)點入隊,都訪問完了,看六號結(jié)點,六號結(jié)點出隊。6號結(jié)點相鄰的且未被訪問的是3 , 7 。visit 3 和 7 并且都放在隊尾,然后看3 ,和3相鄰的且未被訪問的是4 號,訪問4號結(jié)點,讓4 號結(jié)點入隊,最后,3號出隊,看7號結(jié)點,與7號結(jié)點相鄰的且未被訪問的是8號結(jié)點。最后所有結(jié)點都被訪問。

?firstneighbor(g,v),數(shù)據(jù)結(jié)構(gòu),王道數(shù)據(jù)結(jié)構(gòu),深度優(yōu)先,寬度優(yōu)先,算法?

firstneighbor(g,v),數(shù)據(jù)結(jié)構(gòu),王道數(shù)據(jù)結(jié)構(gòu),深度優(yōu)先,寬度優(yōu)先,算法

?

3.算法存在的問題和解決方案

前面介紹的都是連通圖,如果是非連通圖,那么上面算法就實現(xiàn)不了。我們可以直接從0號結(jié)點開始,遍歷所有結(jié)點查看是否有未被訪問的結(jié)點,找到第一個值為false的結(jié)點。從這個結(jié)點出發(fā)調(diào)用BFS。

firstneighbor(g,v),數(shù)據(jù)結(jié)構(gòu),王道數(shù)據(jù)結(jié)構(gòu),深度優(yōu)先,寬度優(yōu)先,算法

?

代碼

bool visited [MAX_VERTEX_NUM] ;   //訪問標(biāo)記數(shù)組
void BFSTraverse(Graph G){       //對圖G進行廣度優(yōu)先遍歷
   for( i=0; i<G.vexnum;++i)
       visited[i]=FALSE;          //訪問標(biāo)記數(shù)組初始化
   InitQueue(Q);                //初始化輔助隊列Q
   for( i=0; i<G.vexnum;++i)    //從0號頂點開始遍歷
      if( !visited[i])            //對每個連通分量調(diào)用一次BFS
         BFS(G,i);               // vi未訪問過,從vi開始BFS
}

bool visited [MAX_VERTEX_NUM];/訪問標(biāo)記數(shù)組

//廣度優(yōu)先遍歷
void BFS( Graph G,int v){//從頂點v出發(fā),廣度優(yōu)先遍歷圖G
	visit(v);	//訪問初始頂點v
	
	visited [v]=TRUE;	//對v做已訪問標(biāo)記
	
	Enqueue(Q,v);     //頂點v入隊列Q
	
	while( !isEmpty(Q) ){
	DeQueue(Q, v);    //頂點v出隊列
	for(w=FirstNeighbor(G,v ) ;w>= ;  w=NextNeighbor(G,v,w))
	//檢測v所有鄰接點
	if( !visited [w] )//w為v的尚未訪問的鄰接頂點
	{
	   visit(w);//訪問頂點w
	   visited [w]=TRUE;//對w做已訪問標(biāo)記
	   EnQueue(Q,w);//頂點w入隊列

	}
}

?

4.知識回顧與總結(jié)

?

firstneighbor(g,v),數(shù)據(jù)結(jié)構(gòu),王道數(shù)據(jù)結(jié)構(gòu),深度優(yōu)先,寬度優(yōu)先,算法


?

圖的深度優(yōu)先遍歷

1.樹的深度優(yōu)先遍歷

樹的深度優(yōu)先遍歷有點類似于先根遍歷

首先遍歷 1 2 5 6 3? 4 7 8 ,它的遍歷更趨向于先深層的遍歷樹。

firstneighbor(g,v),數(shù)據(jù)結(jié)構(gòu),王道數(shù)據(jù)結(jié)構(gòu),深度優(yōu)先,寬度優(yōu)先,算法

?

2.圖的深度優(yōu)先遍歷

首先我們可以先看一下2,和2相鄰的是1號結(jié)點和6號結(jié)點。和2相鄰的第一個結(jié)點是1,所以先訪問1,1號結(jié)點未被訪問。和1號結(jié)點相鄰的為2 號和5號,但是2號被訪問過了,所以看5號結(jié)點。和5號結(jié)點相鄰的結(jié)點點都被訪問過。這個頂點的DFS調(diào)用完,返回到1號接點調(diào)用層,但是1號節(jié)點調(diào)用都被調(diào)用完了,那么就可以返回2號結(jié)點調(diào)用層,2號結(jié)點身邊的結(jié)點未被訪問。即是6號結(jié)點。和6號結(jié)點相近的且未被訪問的是 3和 7號結(jié)點,先訪問3號結(jié)點,下一個應(yīng)該被訪問的是4號結(jié)點,和4號相鄰的且未被訪問的是7號結(jié)點,最后8號結(jié)點未被訪問,訪問一下8號結(jié)點。

firstneighbor(g,v),數(shù)據(jù)結(jié)構(gòu),王道數(shù)據(jù)結(jié)構(gòu),深度優(yōu)先,寬度優(yōu)先,算法

?

代碼

bool visited [MAX_VERTEX_NUM] ;//訪問標(biāo)記數(shù)組
void DFS(Graph G,int v){    //從頂點v出發(fā),深度優(yōu)先遍歷圖G
   visit(v );   //訪問頂點v
   visited [v]=TRUE;   //設(shè)已訪問標(biāo)記
   for( w=FirstNeighbor(G,v) ;w>=0 ; w=NextNeighor(G,v,w) )
   if( !visited [w] ){    //w為u的尚未訪問的鄰接頂點
      DFS(G,w) ;
}

?

3.算法存在的問題和解決方案

與廣度優(yōu)先算法一樣,如果存在非連通圖,那么同樣的,我們可以直接從0號結(jié)點開始,遍歷所有結(jié)點查看是否有未被訪問的結(jié)點,找到第一個值為false的結(jié)點。從這個結(jié)點出發(fā)調(diào)用BFS。

最終代碼

bool visited [MAX_VERTEX_NUM];//訪問標(biāo)記數(shù)組
void DFSTraverse(Graph G){   //對圖G進行深度優(yōu)先遍歷
   for( v=0; v<G.vexnum;++v)
     visited[v]=FALSE;       //初始化已訪問標(biāo)記數(shù)據(jù)
   for( v=0 ; v<G.vexnum; ++v)   //本代碼中是從v=0開始遍歷
     if( !visited[v])
       DFS(G,v);
}


bool visited [MAX_VERTEX_NUM] ;//訪問標(biāo)記數(shù)組
void DFS(Graph G,int v){    //從頂點v出發(fā),深度優(yōu)先遍歷圖G
   visit(v );   //訪問頂點v
   visited [v]=TRUE;   //設(shè)已訪問標(biāo)記
   for( w=FirstNeighbor(G,v) ;w>=0 ; w=NextNeighor(G,v,w) )
   if( !visited [w] ){    //w為u的尚未訪問的鄰接頂點
      DFS(G,w) ;
}

4.知識回顧與總結(jié)

?

firstneighbor(g,v),數(shù)據(jù)結(jié)構(gòu),王道數(shù)據(jù)結(jié)構(gòu),深度優(yōu)先,寬度優(yōu)先,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-783742.html

到了這里,關(guān)于圖的二種遍歷-廣度優(yōu)先遍歷和深度優(yōu)先遍歷的文章就介紹完了。如果您還想了解更多內(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)文章

  • 圖的遍歷-深度優(yōu)先遍歷與廣度優(yōu)先遍歷(C語言)

    圖的遍歷 概念:指的是從圖中的任一頂點出發(fā),對圖中的所有頂點訪問一次且只訪問一次。 鄰接矩陣及鄰接表的創(chuàng)建 : 圖的存儲結(jié)構(gòu)-無向鄰接矩陣與無向鄰接表(C語言). 結(jié)構(gòu)定義 鄰接矩陣的深度優(yōu)先遍歷操作 鄰接矩陣的深度優(yōu)先遞歸算法 結(jié)構(gòu)定義 鄰接表的深度優(yōu)先遍

    2024年02月06日
    瀏覽(20)
  • 大話數(shù)據(jù)結(jié)構(gòu)-圖的深度優(yōu)先遍歷和廣度優(yōu)先遍歷

    大話數(shù)據(jù)結(jié)構(gòu)-圖的深度優(yōu)先遍歷和廣度優(yōu)先遍歷

    ??圖的遍歷分為深度優(yōu)先遍歷和廣度優(yōu)先遍歷兩種。 ??深度優(yōu)先遍歷(Depth First Search),也稱為深度優(yōu)先搜索,簡稱DFS,深度優(yōu)先遍歷,是指從某一個頂點開始,按照一定的規(guī)則,訪問并記錄下一個未訪問頂點。對于非連通圖,則是按連通分量,采用同一規(guī)則進行深度優(yōu)

    2024年02月04日
    瀏覽(24)
  • 圖的遍歷之 深度優(yōu)先搜索和廣度優(yōu)先搜索

    圖的遍歷之 深度優(yōu)先搜索和廣度優(yōu)先搜索

    深度優(yōu)先搜索的圖文介紹 1. 深度優(yōu)先搜索介紹 圖的深度優(yōu)先搜索(Depth First Search),和樹的先序遍歷比較類似。 它的思想:假設(shè)初始狀態(tài)是圖中所有頂點均未被訪問,則從某個頂點v出發(fā),首先訪問該頂點,然后依次從它的各個未被訪問的鄰接點出發(fā)深度優(yōu)先搜索遍歷圖,直至

    2024年02月13日
    瀏覽(19)
  • 蠻力算法之深度優(yōu)先遍歷和廣度優(yōu)先遍歷——圖的深度優(yōu)先遍歷和廣度優(yōu)先遍歷,附帶案例:迷宮問題及矩陣中傳染性傳播問題

    蠻力算法之深度優(yōu)先遍歷和廣度優(yōu)先遍歷——圖的深度優(yōu)先遍歷和廣度優(yōu)先遍歷,附帶案例:迷宮問題及矩陣中傳染性傳播問題

    這兩種搜索方法本質(zhì)上都是基于蠻力法思路 這兩種搜索方法對有向圖和無向圖都適用 1.1 鄰接矩陣 鄰接矩陣示意圖: 1.2 鄰接表 注意:邊結(jié)點代表的是圖中的邊,而并非圖中的結(jié)點;頭結(jié)點才表示圖中的結(jié)點;頭結(jié)點身后所連接的為邊結(jié)點 鄰接表示意圖:(一般默認為出邊

    2024年02月05日
    瀏覽(19)
  • (超詳細)C++圖的深度優(yōu)先遍歷、廣度優(yōu)先遍歷(數(shù)據(jù)結(jié)構(gòu))

    (超詳細)C++圖的深度優(yōu)先遍歷、廣度優(yōu)先遍歷(數(shù)據(jù)結(jié)構(gòu))

    ? ? ? ? 根據(jù)下圖,編寫代碼實現(xiàn)圖的深度優(yōu)先遍歷和廣度優(yōu)先遍歷。 ?? ??????按照英文字母順序,以鄰接表為存儲結(jié)構(gòu),實現(xiàn)圖的深度優(yōu)先和廣度優(yōu)先遍歷。遍歷的順序從頂點a開始。 以用戶指定的結(jié)點為起點,分別輸出每種遍歷下的結(jié)點訪問序列。 ? (1)從頂點a,

    2024年02月08日
    瀏覽(28)
  • 圖詳解第二篇:圖的遍歷(廣度優(yōu)先+深度優(yōu)先)

    圖詳解第二篇:圖的遍歷(廣度優(yōu)先+深度優(yōu)先)

    所謂圖的遍歷: 即從圖中的任一頂點出發(fā),對圖中的所有頂點訪問一次且只訪問一次。 給定一個圖G和其中任意一個頂點v0,從v0出發(fā),沿著圖中各邊訪問圖中的所有頂點,且每個頂點僅被遍歷一次。 ps: 我們后面講解這些圖相關(guān)的算法默認都針對鄰接矩陣結(jié)構(gòu)的圖去講解,

    2024年02月08日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】圖的深度優(yōu)先和廣度優(yōu)先遍歷

    【數(shù)據(jù)結(jié)構(gòu)與算法】圖的深度優(yōu)先和廣度優(yōu)先遍歷

    ????作者簡介???? : 大家好,我是南瓜籽,一個在校大二學(xué)生,我將會持續(xù)分享Java相關(guān)知識。 ????個人主頁???? : 南瓜籽的主頁 ??座右銘?? : 堅持到底,決不放棄,是成功的保證,只要你不放棄,你就有機會,只要放棄的人,他肯定是不會成功的人。 圖是一

    2024年02月02日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】圖的遍歷:廣度優(yōu)先(BFS),深度優(yōu)先(DFS)

    【數(shù)據(jù)結(jié)構(gòu)】圖的遍歷:廣度優(yōu)先(BFS),深度優(yōu)先(DFS)

    目錄 1、廣度優(yōu)先(BFS) 算法思想? 廣度優(yōu)先生成樹? 知識樹? 代碼實現(xiàn)? 2、深度優(yōu)先(DFS) 算法思想? 深度優(yōu)先生成樹 知識樹? 代碼實現(xiàn)? ?????????圖的廣度優(yōu)先遍歷(BFS)是一種遍歷圖的算法,其思想是從起始頂點開始遍歷圖,先訪問起始頂點的所有直接鄰居,然

    2024年02月04日
    瀏覽(33)
  • 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記——圖的遍歷算法(深度優(yōu)先搜索和廣度優(yōu)先搜索)

    數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記——圖的遍歷算法(深度優(yōu)先搜索和廣度優(yōu)先搜索)

    圖的遍歷指從圖中某一頂點出發(fā)(任意一個頂點都可以作為訪問的起始頂點),按照某種遍歷方法,對圖中所有的頂點訪問一次且只訪問一次。圖與樹不一樣,其中一個頂點可能與多個頂點相連,所以需記錄已訪問過的頂點,當(dāng)訪問一個頂點后,考慮如何選取下一個要訪問的

    2024年02月05日
    瀏覽(39)
  • 圖的遍歷(搜索)算法(深度優(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)紅包