图的概念-广度优先与深度优先

from collections import deque



GRAPH = {
	'A':['B', 'F'],
	'B':['C', 'I', 'G'],
	'C':['B', 'I', 'D'],
	'D':['C', 'I', 'G', 'H', 'E'],
	'E':['D', 'H', 'F'],
	'F':['A', 'G', 'E'],
	'G':['B', 'F', 'H', 'D'],
	'H':['G', 'D', 'E'],
	'I':['B', 'C', 'D'],
}



class Queue(object):
	def __init__(self):
		self._deque = deque()
	
	def push(self, value):
		return self._deque.append(value)

	def pop(self):
		return self._deque.popleft()
	
	def __len__(self):
		return len(self._deque)
	
def bfs(graph, start):
	search_queue = Queue()
	search_queue.push(start)
	searched = set()

	while search_queue:
		cur_node = search_queue.pop()
		if cur_node not in searched:
			print(cur_node)
			searched.add(cur_node)
			for node in graph[cur_node]:
				search_queue.push(node)





print('graph:')
bfs(GRAPH, 'A')


DFS_SEARCHED = set()
def dfs(graph, start):
	if start not in DFS_SEARCHED:
		print(start)
		DFS_SEARCHED.add(start)
	
	for node in graph[start]:
		if node not in DFS_SEARCHED:
			dfs(graph, node)

print('graph:')
dfs(GRAPH, 'A')
posted @ 2020-05-02 21:06  ColaIce  阅读(158)  评论(0)    收藏  举报