/
g500.py
52 lines (41 loc) · 1.36 KB
/
g500.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
from bspgraph import *
from bspnode import *
import loader
class BFSGraph (BSPGraph):
def initialize (self, filename):
edge_list = loader.readInEdgesASCII(filename)
if edge_list == False:
raise Exception("Invalid or non-existant file.")
self.build_graph_from_edge_list(edge_list)
self.target_id = self.pick_target()
def pick_target(self):
"""
Randomly choose node_id matching a node with neighbors.
Used to choose a 'target' or initial node for the BFS.
"""
import random
target_node_edges = 0
target_node = -1
while target_node_edges == 0:
target_node = random.randint(0, self.num_nodes-1)
target_node_edges = len(self.nodes[target_node].edges)
return target_node
def bfs_tree_transform (self):
pass
class BFSNode (BSPNode):
def step(self):
self.deactivate()
if self.data != -1:
return
sender = -1
if not self.inbox:
if self.node_id == self.target_id:
self.data = self.target_id
else:
return
else:
sender = self.inbox[0].data
self.data = sender
self.inbox = []
for edge in self.edges:
self.parent_graph.send_message(Message(edge.end_id, self.node_id))