图算法

深度优先(DFS)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class graph:

def __init__(self, gdict=None):
if gdict is None:
gdict = {}
self.gdict = gdict

# Check for the visisted and unvisited nodes
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start)
for next in graph[start] - visited:
dfs(graph, next, visited)
return visited

gdict = {"a": {"b", "c"},
"b": {"a", "d"},
"c": {"a", "d"},
"d": {"e"},
"e": {"a"}
}

dfs(gdict, 'a')

广度优先(BFS)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import collections
class graph:
def __init__(self,gdict=None):
if gdict is None:
gdict = {}
self.gdict = gdict
def bfs(graph,startnode):
seen,queue = {startnode}, collections.deque([startnode])
while queue:
vertex = queue.popleft()
print(vertex)
for node in graph[vertex]:
if node not in seen:
seen.add(node)
queue.append(node)