<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【技術(shù)分享】圖遍歷算法之廣度優(yōu)先遍歷算法

          共 1899字,需瀏覽 4分鐘

           ·

          2023-08-29 11:45

          8e2b16bf981c90536aa8a2482d35ee16.webp

          廣度優(yōu)先遍歷算法應(yīng)用的是隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)的特點(diǎn),它的遍歷過程如下:

          (1)以圖中的任一頂點(diǎn)V為出發(fā)點(diǎn),首先訪問頂點(diǎn)V。

          (2)訪問頂點(diǎn)V的所有未被訪問過的鄰接點(diǎn)V 1 ,V 2 ,……,V n 。

          (3)按照V 1 ,V 2 ,……,V n 的次序,訪問每個(gè)頂點(diǎn)的所有未被訪問過的鄰接點(diǎn)。

          (4)以此類推,直到圖中所有和頂點(diǎn)V連通的頂點(diǎn)都被訪問過為止。

          這里以下圖所示的無向圖為例來介紹此方法的遍歷過程。

          b28f9b5601e2ad258aa93a689aa998fa.webp

          步驟1 :假設(shè)以頂點(diǎn)A為起點(diǎn),將頂點(diǎn)A放入隊(duì)列,如下圖所示。

          1c786d33b8f7d740b06e03cc6006fc56.webp

          步驟2 :取出頂點(diǎn)A,將頂點(diǎn)A的鄰接點(diǎn)B和C放入隊(duì)列,如下圖所示。

          ffa7bc00cb644b728a6114841c243d6b.webp

          步驟3 :根據(jù)隊(duì)列“先進(jìn)先出”的原則,取出頂點(diǎn)B,將與頂點(diǎn)B相鄰并且未被訪問過的頂點(diǎn)D和頂點(diǎn)E放入隊(duì)列,如下圖所示。

          07cbf23288ef46bd445474201139f54e.webp

          步驟4 :取出頂點(diǎn)C,將與頂點(diǎn)C相鄰并且未被訪問過的頂點(diǎn)F放入隊(duì)列,如下圖所示。

          2ba07dddec1642351651d4589741ba98.webp

          步驟5 :取出頂點(diǎn)D,將與頂點(diǎn)D相鄰并且未被訪問過的頂點(diǎn)放入隊(duì)列。由于頂點(diǎn)D的鄰接點(diǎn)B和E都已被訪問過,所以無需放入隊(duì)列中,如下圖所示。

          b50253bff25b6912ad11d916ce212a7e.webp

          步驟6 :取出頂點(diǎn)E,將與頂點(diǎn)E相鄰并且未被訪問過的頂點(diǎn)放入隊(duì)列。由于頂點(diǎn)E的四個(gè)鄰接點(diǎn)都已被訪問過,所以無需放入隊(duì)列中,如下圖所示。

          0e406a01a421837d5b8876592697f7e3.webp

          步驟7 :取出頂點(diǎn)F,將與頂點(diǎn)F相鄰并且未被訪問過的頂點(diǎn)放入隊(duì)列。由于頂點(diǎn)F的鄰接點(diǎn)C和E都已被訪問過,所以無需放入隊(duì)列中,如下圖所示。

          a7e0e8a9c23c8e6f48397fe042d3b896.webp

          此時(shí),隊(duì)列中的值都已被取出,表示圖中的頂點(diǎn)都已被訪問過。由此可知,本例中進(jìn)行廣度優(yōu)先遍歷的順序?yàn)椋喉旤c(diǎn)A、頂點(diǎn)B、頂點(diǎn)C、頂點(diǎn)D、頂點(diǎn)E、頂點(diǎn)F。

          用Python代碼描述上述過程,則算法代碼如下:

          def  bfs (graph, start):

              queue = [] 定義隊(duì)列

               queue.append(start) 將起始頂點(diǎn)放入隊(duì)列

               visited =  set () 定義集合

               visited.add(start) 將起始頂點(diǎn)放入已訪問集合

               while  queue:

                  vertex = queue.pop(0) 取出隊(duì)列第一個(gè)元素

                   print (vertex, end  ' ' ) 打印廣度優(yōu)先遍歷的頂點(diǎn)

                   for  in  graph[vertex] : 遍歷相鄰的頂點(diǎn)

                       if  not in  visited: 如果該頂點(diǎn)未被訪問過

                          visited.add(w) 將該頂點(diǎn)放入已訪問集合

                           queue.append(w) 把頂點(diǎn)放入隊(duì)列


          4575b24b5e70bbb5e06f1c2809df53b0.webp
          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码做爱视频 | 欧美人成人无码 | 国产精品v欧美精品v日韩精品 | 一级黄色电影免费观看 | 人人摸人人操人人操看 |