-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgraph.py
76 lines (69 loc) · 2.2 KB
/
graph.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
70
71
72
73
74
75
76
class Vertex:
def __init__(
self, id: int, height: int, excessFlow: int, sourceId: int, sinkId: int
) -> None:
self.id = id
self.height = height
self.excessFlow = excessFlow
self.sourceId = sourceId
self.sinkId = sinkId
self.isTraverse = False
self.isAdjacent = False
self.isSelected = False
self.isRelabel = False
def toJSON(self):
color = "lightblue" # Normal vertex
if self.isSelected:
color = "red" # Adjacent vertex that is selected to receive excess flow
elif self.isRelabel: # Peforming relabel on vertex
color = "lightgray"
elif self.isTraverse:
color = "lightgreen" # Current selected vertex
elif self.isAdjacent:
color = "lightyellow" # Adjacent vertex
elif self.id == self.sourceId:
color = "lightpink" # Source vertex
elif self.id == self.sinkId:
color = "orange" # Sink vertex
return {
"id": str(self.id),
"label": f"{self.height}:{str(self.excessFlow)}",
"color": color,
}
def __str__(self) -> str:
return str(
{
"id": self.id,
"height": self.height,
"excessFlow": self.excessFlow,
"isTraverse": self.isTraverse,
"isAdjacent": self.isAdjacent,
}
)
class Edge:
def __init__(
self, u: int, v: int, capacity: int, flow: int, isBackward: bool = False
) -> None:
self.u = u
self.v = v
self.capacity = capacity
self.flow = flow
self.isBackward = isBackward
def toJSON(self):
return {
"from": str(self.u),
"to": str(self.v),
"label": str(self.flow),
"style": "dotted" if self.isBackward else "solid",
"color": "lightblue",
}
def __str__(self) -> str:
return str(
{
"from": self.u,
"to": self.v,
"capacity": self.capacity,
"flow": self.flow,
"isBackward": self.isBackward,
}
)