真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python中深度優(yōu)先和廣度優(yōu)先算法的示例分析-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“python中深度優(yōu)先和廣度優(yōu)先算法的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“python中深度優(yōu)先和廣度優(yōu)先算法的示例分析”這篇文章吧。

在順河等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都營(yíng)銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站制作,順河網(wǎng)站建設(shè)費(fèi)用合理。

具體如下:

首先有一個(gè)概念:回溯

回溯法(探索與回溯法)是一種選優(yōu)搜索法,按選優(yōu)條件向前搜索,以達(dá)到目標(biāo)。但當(dāng)探索到某一步時(shí),發(fā)現(xiàn)原先選擇并不優(yōu)或達(dá)不到目標(biāo),就退回一步重新選擇,這種走不通就退回再走的技術(shù)為回溯法,而滿足回溯條件的某個(gè)狀態(tài)的點(diǎn)稱為“回溯點(diǎn)”。

深度優(yōu)先算法:

(1)訪問(wèn)初始頂點(diǎn)v并標(biāo)記頂點(diǎn)v已訪問(wèn)。
(2)查找頂點(diǎn)v的第一個(gè)鄰接頂點(diǎn)w。
(3)若頂點(diǎn)v的鄰接頂點(diǎn)w存在,則繼續(xù)執(zhí)行;否則回溯到v,再找v的另外一個(gè)未訪問(wèn)過(guò)的鄰接點(diǎn)。
(4)若頂點(diǎn)w尚未被訪問(wèn),則訪問(wèn)頂點(diǎn)w并標(biāo)記頂點(diǎn)w為已訪問(wèn)。
(5)繼續(xù)查找頂點(diǎn)w的下一個(gè)鄰接頂點(diǎn)wi,如果v取值wi轉(zhuǎn)到步驟(3)。直到連通圖中所有頂點(diǎn)全部訪問(wèn)過(guò)為止。

廣度優(yōu)先算法:

(1)頂點(diǎn)v入隊(duì)列。
(2)當(dāng)隊(duì)列非空時(shí)則繼續(xù)執(zhí)行,否則算法結(jié)束。
(3)出隊(duì)列取得隊(duì)頭頂點(diǎn)v;訪問(wèn)頂點(diǎn)v并標(biāo)記頂點(diǎn)v已被訪問(wèn)。
(4)查找頂點(diǎn)v的第一個(gè)鄰接頂點(diǎn)col。
(5)若v的鄰接頂點(diǎn)col未被訪問(wèn)過(guò)的,則col入隊(duì)列。
(6)繼續(xù)查找頂點(diǎn)v的另一個(gè)新的鄰接頂點(diǎn)col,轉(zhuǎn)到步驟(5)。直到頂點(diǎn)v的所有未被訪問(wèn)過(guò)的鄰接點(diǎn)處理完。轉(zhuǎn)到步驟(2)。

代碼:

#!/usr/bin/python
# -*- coding: utf-8 -*-
class Graph(object):
  def __init__(self,*args,**kwargs):
    self.node_neighbors = {}
    self.visited = {}
  def add_nodes(self,nodelist):
    for node in nodelist:
      self.add_node(node)
  def add_node(self,node):
    if not node in self.nodes():
      self.node_neighbors[node] = []
  def add_edge(self,edge):
    u,v = edge
    if(v not in self.node_neighbors[u]) and ( u not in self.node_neighbors[v]):
      self.node_neighbors[u].append(v)
      if(u!=v):
        self.node_neighbors[v].append(u)
  def nodes(self):
    return self.node_neighbors.keys()
  def depth_first_search(self,root=None):
    order = []
    def dfs(node):
      self.visited[node] = True
      order.append(node)
      for n in self.node_neighbors[node]:
        if not n in self.visited:
          dfs(n)
    if root:
      dfs(root)
    for node in self.nodes():
      if not node in self.visited:
        dfs(node)
    print order
    return order
  def breadth_first_search(self,root=None):
    queue = []
    order = []
    def bfs():
      while len(queue)> 0:
        node = queue.pop(0)
        self.visited[node] = True
        for n in self.node_neighbors[node]:
          if (not n in self.visited) and (not n in queue):
            queue.append(n)
            order.append(n)
    if root:
      queue.append(root)
      order.append(root)
      bfs()
    for node in self.nodes():
      if not node in self.visited:
        queue.append(node)
        order.append(node)
        bfs()
    print order
    return order
if __name__ == '__main__':
  g = Graph()
g.add_nodes([i+1 for i in range(8)])
g.add_edge((1, 2))
g.add_edge((1, 3))
g.add_edge((2, 4))
g.add_edge((2, 5))
g.add_edge((4, 8))
g.add_edge((5, 8))
g.add_edge((3, 6))
g.add_edge((3, 7))
g.add_edge((6, 7))
print "nodes:", g.nodes()
order = g.breadth_first_search(1)
order = g.depth_first_search(1)

結(jié)果:

nodes: [1, 2, 3, 4, 5, 6, 7, 8]

廣度優(yōu)先:
[1, 2, 3, 4, 5, 6, 7, 8]

深度優(yōu)先:

[1, 2, 4, 8, 5, 3, 6, 7]

以上是“python中深度優(yōu)先和廣度優(yōu)先算法的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


標(biāo)題名稱:python中深度優(yōu)先和廣度優(yōu)先算法的示例分析-創(chuàng)新互聯(lián)
本文來(lái)源:http://weahome.cn/article/jddsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部