-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGraph.py
More file actions
90 lines (77 loc) · 2.59 KB
/
Copy pathGraph.py
File metadata and controls
90 lines (77 loc) · 2.59 KB
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
'''
Vertex/Edge/Graph Data Structures
Supports weighted edges
Supports x and y coordinates for verticies
Default Graph is undirected, for undirected comment out line 43
'''
class Vertex():
def __init__(self, label, x=None, y=None):
self.label = label
self.edges = []
self.x = x
self.y = y
def add_edge(self,edge):
self.edges.append(edge)
def edges_out(self):
return self.edges
class Edge():
def __init__(self,A,B,weight=None):
self.src = A
self.dest = B
self.weight = weight
class Graph():
def __init__(self):
self.verticies = {}
def add_vertex(self,A):
self.verticies[A.label] = A
def has_vertex(self,A):
return A in self.verticies.keys()
def add_edge(self,edge):
if self.has_vertex(edge.src) and self.has_vertex(edge.dest):
self.verticies[edge.src].add_edge(edge)
self.verticies[edge.dest].add_edge(Edge(edge.dest, edge.src, edge.weight))
def edges_out(self, A):
if self.has_vertex(A):
return self.verticies[A].edges_out()
else:
return None
def toString(self):
toString = {}
for vertex in self.verticies:
toString[vertex] = []
for edge in self.verticies[vertex].edges_out():
if edge.weight:
toString[vertex].append((edge.dest,edge.weight))
else:
toString[vertex].append(edge.dest)
return toString
example = Graph()
example.add_vertex(Vertex('A', 0.0, 8.0))
example.add_vertex(Vertex('B', 6.0, 8.0))
example.add_vertex(Vertex('C', 0.0, 0.0))
example.add_vertex(Vertex('D', 6.0, 0.0))
example.add_vertex(Vertex('E', 1.5, 6.0))
example.add_vertex(Vertex('F', 3.0, 4.0))
example.add_vertex(Vertex('G', 4.5, 2.0))
example.add_vertex(Vertex('H', 3.0, 8.0))
example.add_vertex(Vertex('I', 0.0, 4.0))
example.add_vertex(Vertex('J', 6.0, 4.0))
example.add_vertex(Vertex('K', 3.0, 0.0))
example.add_vertex(Vertex('L', 4.5, 6.0))
example.add_vertex(Vertex('M', 1.5, 2.0))
example.add_edge(Edge('A','H',4))
example.add_edge(Edge('A','I',3))
example.add_edge(Edge('B','H',4))
example.add_edge(Edge('F','H',4))
example.add_edge(Edge('I','F',3))
example.add_edge(Edge('I','C',4))
example.add_edge(Edge('B','J',4))
example.add_edge(Edge('J','D',4))
example.add_edge(Edge('J','F',3))
example.add_edge(Edge('K','C',3))
example.add_edge(Edge('K','D',3))
example.add_edge(Edge('K','F',4))
example.add_edge(Edge('A','E',2.5))
example.add_edge(Edge('E','F',2.5))
example.add_edge(Edge('F','G',2.5))
example.add_edge(Edge('G','D',2.5))