国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python深度優(yōu)先搜索和廣度優(yōu)先搜索

2020-02-22 23:10:16
字體:
供稿:網(wǎng)友

1. 深度優(yōu)先搜索介紹

圖的深度優(yōu)先搜索(Depth First Search),和樹的先序遍歷比較類似。

它的思想:假設(shè)初始狀態(tài)是圖中所有頂點(diǎn)均未被訪問,則從某個頂點(diǎn)v出發(fā),首先訪問該頂點(diǎn),然后依次從它的各個未被訪問的鄰接點(diǎn)出發(fā)深度優(yōu)先搜索遍歷圖,直至圖中所有和v有路徑相通的頂點(diǎn)都被訪問到。 若此時尚有其他頂點(diǎn)未被訪問到,則另選一個未被訪問的頂點(diǎn)作起始點(diǎn),重復(fù)上述過程,直至圖中所有頂點(diǎn)都被訪問到為止。

顯然,深度優(yōu)先搜索是一個遞歸的過程。

2. 廣度優(yōu)先搜索介紹

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

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

換句話說,廣度優(yōu)先搜索遍歷圖的過程是以v為起點(diǎn),由近至遠(yuǎn),依次訪問和v有路徑相通且路徑長度為1,2...的頂點(diǎn)。

# -*- 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+'鄰接點(diǎn)為'+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 '深度優(yōu)先遍歷的結(jié)構(gòu)為'g.dfs('c')print '廣度優(yōu)先遍歷的結(jié)構(gòu)為'g.bfs('c')

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 金昌市| 龙井市| 来凤县| 观塘区| 大余县| 克什克腾旗| 壶关县| 琼结县| 内江市| 崇左市| 府谷县| 嘉峪关市| 资溪县| 拜泉县| 浠水县| 长顺县| 丁青县| 治多县| 泸溪县| 哈密市| 揭阳市| 黑山县| 康定县| 治多县| 顺平县| 吉安县| 商城县| 喀什市| 碌曲县| 榆中县| 开远市| 平安县| 长沙市| 孙吴县| 丰台区| 西吉县| 梨树县| 永川市| 嘉峪关市| 连云港市| 永登县|