Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Vertice:
- def __init__(self,n):
- self.nombre = n
- self.vecinos = list()
- self.d = 0
- self.f = 0
- self.color = 'white'
- self.pred = -1
- def agregarVecino(self, v):
- if v not in self.vecinos:
- self.vecinos.append(v)
- self.vecinos.sort()
- class Grafo:
- vertices = {}
- tiempo = 0
- def agregarVertice(self, vertice):
- if isinstance(vertice, Vertice) and vertice.nombre not in self.vertices:
- self.vertices[vertice.nombre] = vertice
- return True
- else:
- return False
- def agregarArista(self, u, v):
- if u in self.vertices and v in self.vertices:
- for key, value in self.vertices.items():
- if key == u:
- value.agregarVecino(v)
- #if key == v: #Se comenta porque es grafo dirigido
- # value.agregarVecino(u)
- return True
- else:
- return False
- def imprimeGrafo(self):
- for key in sorted(list(self.vertices.keys())):
- print("Vertice: "+key )
- print("Descubierto/termino: "+str(self.vertices[key].d)+ "/"+ str(self.vertices[key].f))
- def dfs(self, vert):
- global tiempo
- tiempo = 0
- for v in sorted(list (self.vertices.keys())):
- if self.vertices[v].color == 'white':
- self.dfsVisitar (self.vertices[v])
- def dfsVisitar(self, vert):
- global tiempo
- tiempo = tiempo + 1
- vert.d = tiempo
- vert.color = 'gris'
- for v in vert.vecinos:
- if self.vertices[v].color == 'white':
- self.vertices[v].pred = vert
- self.dfsVisitar(self.vertices[v])
- vert.color = 'black'
- tiempo = tiempo + 1
- vert.f = tiempo
- class Controladora:
- def main(self):
- g = Grafo()
- a = Vertice('U')
- g.agregarVertice(a)
- for i in range(ord('U'), ord('[')):
- g.agregarVertice(Vertice(chr(i)))
- edges = ['UV','UX','VY','YX','XV','WY','WZ']
- for edge in edges:
- g.agregarArista(edge[:1], edge[1:])
- g.dfs(a)
- g.imprimeGrafo()
- obj = Controladora()
- obj.main()
- Vertice: U
- Descubierto/termino: 1/8
- Vertice: V
- Descubierto/termino: 2/7
- Vertice: W
- Descubierto/termino: 9/12
- Vertice: X
- Descubierto/termino: 4/5
- Vertice: Y
- Descubierto/termino: 3/6
- Vertice: Z
- Descubierto/termino: 10/11
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement