python深度優先搜尋和廣度優先搜尋,python深度優先搜尋

來源:互聯網
上載者:User

python深度優先搜尋和廣度優先搜尋,python深度優先搜尋

1. 深度優先搜尋介紹

圖的深度優先搜尋(Depth First Search),和樹的先序遍曆比較類似。

它的思想:假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點,然後依次從它的各個未被訪問的鄰接點出發深度優先搜尋遍曆圖,直至圖中所有和v有路徑相通的頂點都被訪問到。 若此時尚有其他頂點未被訪問到,則另選一個未被訪問的頂點作起始點,重複上述過程,直至圖中所有頂點都被訪問到為止。

顯然,深度優先搜尋是一個遞迴的過程。

2. 廣度優先搜尋介紹

廣度優先搜尋演算法(Breadth First Search),又稱為"寬度優先搜尋"或"橫向優先搜尋",簡稱BFS。

它的思想是:某頂點v出發,在訪問了v之後依次訪問v的各個未曾訪問過的鄰接點,然後分別從這些鄰接點出發依次訪問它們的鄰接點,並使得“先被訪問的頂點的鄰接點先於後被訪問的頂點的鄰接點被訪問,直至圖中所有已被訪問的頂點的鄰接點都被訪問到。如果此時圖中尚有頂點未被訪問,則需要另選一個未曾被訪問過的頂點作為新的起始點,重複上述過程,直至圖中所有頂點都被訪問到為止。

換句話說,廣度優先搜尋遍曆圖的過程是以v為起點,由近至遠,依次訪問和v有路徑相通且路徑長度為1,2...的頂點。

# -*- coding: utf-8 -*-"""Created on Wed Sep 27 00:41:25 2017@author: my"""from collections import OrderedDictclass graph: nodes=OrderedDict({})#有序字典 def toString(self): for key in self.nodes: print key+'鄰接點為'+str(self.nodes[key].adj)  def add(self,data,adj,tag): n=Node(data,adj) self.nodes[tag]=n  for vTag in n.adj: if self.nodes.has_key(vTag) and tag not in self.nodes[vTag].adj: self.nodes[vTag].adj.append(tag) visited=[] def dfs(self,v): if v not in self.visited: self.visited.append(v) print v for adjTag in self.nodes[v].adj: self.dfs(adjTag) visited2=[] def bfs(self,v):  queue=[] queue.insert(0,v) self.visited2.append(v) while(len(queue)!=0): top=queue[len(queue)-1] for temp in self.nodes[top].adj: if temp not in self.visited2:  self.visited2.append(temp)  queue.insert(0,temp) print top queue.pop()class Node: data=0 adj=[] def __init__(self,data,adj): self.data=data self.adj=adjg=graph()g.add(0,['e','c'],'a')g.add(0,['a','g'],'b')g.add(0,['a','e'],'c')g.add(0,['a','f'],'d')g.add(0,['a','c','f'],'e')g.add(0,['d','g','e'],'f')g.add(0,['b','f'],'g')g.toString()print '深度優先遍曆的結構為'g.dfs('c')print '廣度優先遍曆的結構為'g.bfs('c')

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.