Skip to content

Instantly share code, notes, and snippets.

@SamuraiT
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SamuraiT/9318649 to your computer and use it in GitHub Desktop.
Save SamuraiT/9318649 to your computer and use it in GitHub Desktop.
Breadth-first-search implementation
RandomGraph(Graph):
def bfs(self, v):
"""search graph by a BFS: breadth-first-search"""
worklist = [v]
closed = []
while worklist: # order of growth is O(n)
visited = worklist.pop(0) # O(n)
closed.append(visited) #
vs = self.out_vertices(visited)
vs = [v for v in vs if not (v in closed or v in worklist)] # ~O(n)
worklist.extend(vs)
return closed
def better_bfs(self, v):
"""order of growth is linear: O(n)"""
worklist = deque([v])
closed = set()
while worklist: # order of growth is O(n)
visited = worklist.popleft() # O(1)
if visited in closed:continue
closed.add(visited)
vs = self.out_vertices(visited)
worklist.extend(vs)
return closed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment