깊이 우선 과 넓이 우선 Python 구현
#coding=utf-8
class Gragh():
def __init__(self,nodes,sides):
'''
nodes
sides
'''
# self.sequense ,key ,value key
self.sequense = {}
# self.side ,
self.side=[]
for node in nodes:
for side in sides:
u,v=side
# , , self.side
if node ==u:
self.side.append(v)
elif node == v:
self.side.append(u)
self.sequense[node] = self.side
self.side=[]
#print self.sequense
'''
# Depth-First-Search
, 。 , 。
v , v 。
。 ,
, 。 。
'''
def DFS(self,node0):
#queue ,
#order
queue,order=[],[]
# queue ,
queue.append(node0)
while queue:
# queue pop v, v , pop , order
# ,pop() , for , ,
#
v = queue.pop()
order.append(v)
# v
for w in self.sequense[v]:
#w queue order, , queue ,
if w not in order and w not in queue:
queue.append(w)
return order
'''
readth-First-Search
BFS , 。 , 。
open-closed 。
'''
def BFS(self,node0):
#queue ,
#order
queue,order = [],[]
# queue ,
# , ,
queue.append(node0)
order.append(node0)
while queue:
#queue.pop(0) , , for v
# queue , queue.pop(0) ,
v = queue.pop(0)
for w in self.sequense[v]:
if w not in order:
# order.append(w) ,
# self.sequense[v] order
order.append(w)
queue.append(w)
return order
def main():
nodes = [i+1 for i in xrange(8)]
sides=[(1, 2),
(1, 3),
(2, 4),
(2, 5),
(4, 8),
(5, 8),
(3, 6),
(3, 7),
(6, 7)]
G = Gragh(nodes,sides)
print G.DFS(1)
print G.BFS(1)
print G.DFS1(1)
if __name__ == "__main__":
main()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.