-
Notifications
You must be signed in to change notification settings - Fork 0
/
BFS.py
69 lines (48 loc) · 2.42 KB
/
BFS.py
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class Node:
def __init__(self, name, value):
self.name = name
self.value = value
class Graph:
# Ο κατασκευαστής προετοιμάζει ένα κενό λεξικό
def __init__(self):
self.al = {}
" Προσθέτω έναν κόμβο στο γράφημα με την μορφή ενός ζεύγους (κλειδί, τιμή). Το κλειδί είναι ο ίδιος ο κόμβος και η τιμή είναι η λίστα των κόμβων στους οποίους είναι δυνατή η πρόσβαση από αυτόν τον κόμβο. "
def addNode(self, node, lst):
self.al[node] = lst
" bfs & nodes"
def bfs(self, node):
print (node.name)
level = {node: 0}
" Το επίπεδο είναι ένα λεξικό που περιέχει όλους τους κόμβους που επισκέφτηκε και τα επίπεδά τους. Αυτό το λεξικό αναζητείται κάθε φορά που θέλουμε να δούμε αν έχει γίνει επίσκεψη σε έναν κόμβο."
neighbors = {node: None}
i = 1 # i κρατά τα levels
queue = [node]
" Αυτό θα εκχωρείται ως νέα λίστα σε κάθε επανάληψη. Αυτό θα έχει κ την λίστα των κόμβων δίπλα στον τρέχοντα κόμβο έως ότου κανένας κόμβος δεν μείνει χωρίς επίσκεψη."
while queue:
next_node = []
"Το next_node είναι μια προσωρινή λίστα για τη διατήρηση των τιμών που θα γίνουν από το επόμενο que."
for x in queue:
for v in self.al[x]:
if v not in level:
print (v.name)
level[v] = i
neighbors [v] = x
next_node.append(v)
queue = next_node
i += 1
return level
if __name__ == '__main__':
A = Node('A', 1)
B = Node('B', 2)
C = Node('C', 3)
D = Node('D', 4)
E = Node('E', 5)
#Γράφος edges
g = Graph()
g.addNode(A, [B])
g.addNode(B, [C])
g.addNode(C, [D])
g.addNode(D, [E])
g.addNode(E, [E])
g.bfs(A)
#spyrogamiese