Beispiel #1
0
def dfs_2(grafo, v, revisados):
    adjs = g.adjacents(grafo, v)
    adjs_iter = it.newIterator(adjs)
    while (it.hasNext(adjs_iter)):
        w = it.next(adjs_iter)
        visited_w = map.contains(revisados, w)
        if visited_w == False:
            map.put(revisados, w, {'marked': True, 'edgeTo': v})
            dfs_2(grafo, w, revisados)
Beispiel #2
0
def depth_first_search(Graph, Mapa_de_marcar, node):
    valor={'nodo':node, 'stado':True, 'predecesor':None}
    map.put(Mapa_de_marcar,valor['nodo'],valor)
    list_ad=g.adjacents(Graph,node)
    for i in range (1,lt.size(list_ad)+1):
        li_node=lt.getElement(list_ad,i)
        if not map.contains(Mapa_de_marcar,li_node):
            record={'nodo':li_node, 'stado':True, 'predecesor':node}
            map.put(Mapa_de_marcar,record['nodo'],record)
            depth_first_search(Graph, Mapa_de_marcar, li_node)
Beispiel #3
0
def depth_first_search(catalog,node):
    valor={'nodo':node, 'stado':True, 'predecesor':None}
    map.put(catalog['visitedMap'],valor['nodo'],valor)
    list_ad=g.adjacents(catalog['delayGraph'],node)
    for i in range (1,lt.size(list_ad)+1):
        li_node=lt.getElement(list_ad,i)
        if not map.contains(catalog['visitedMap'],li_node):
            record={'nodo':li_node, 'stado':True, 'predecesor':node}
            map.put(catalog['visitedMap'],record['nodo'],record)
            depth_first_search(catalog,li_node)
Beispiel #4
0
def contar_conectados(grafo, dicc_vertices, vertice):
    adjacentes = g.adjacents(grafo, vertice)
    if adjacentes != None:
        iterator2 = it.newIterator(adjacentes)
        while  it.hasNext(iterator2):
            vertice_adj = it.next(iterator2)
            esta_visitado = dicc_vertices.get(vertice_adj)
            if esta_visitado != "visited":
                dicc_vertices[vertice_adj] = "visited"
                contar_conectados(grafo, dicc_vertices, vertice_adj)
    return dicc_vertices
Beispiel #5
0
 def dfs(self, graph, vert, marked, pre, post, reversepost):
     q.enqueue(pre, vert)
     m.put(marked, vert, True)
     lstadjacents = g.adjacents(graph, vert)
     adjiterator = it.newIterator(lstadjacents)
     while it.hasNext(adjiterator):
         adjvert = it.next(adjiterator)
         if not m.contains(marked, adjvert):
             self.dfs(graph, adjvert, marked, pre, post, reversepost)
     q.enqueue(post, vert)
     s.push(reversepost, vert)
 def sccCount(self, graph, vert, marked, idscc, scc):
     """
      Este algoritmo cuenta el número de componentes conectados.
      Deja en idscc, el número del componente al que pertenece cada vértice
     """
     m.put(marked, vert, True)
     m.put(idscc, vert, scc)
     lstadjacents = g.adjacents(graph, vert)
     adjiterator = it.newIterator(lstadjacents)
     while it.hasNext(adjiterator):
         adjvert = it.next(adjiterator)
         if not m.contains(marked, adjvert):
             self.sccCount(graph, adjvert, marked, idscc, scc)
    def test_adjacents(self):
        graph = g.newGraph(7, self.comparenames, directed=True)

        g.insertVertex(graph, 'Bogota')
        g.insertVertex(graph, 'Yopal')
        g.insertVertex(graph, 'Cali')
        g.insertVertex(graph, 'Medellin')
        g.insertVertex(graph, 'Pasto')
        g.insertVertex(graph, 'Barranquilla')
        g.insertVertex(graph, 'Manizales')

        g.addEdge(graph, 'Bogota', 'Yopal')
        g.addEdge(graph, 'Bogota', 'Medellin')
        g.addEdge(graph, 'Bogota', 'Pasto')
        g.addEdge(graph, 'Bogota', 'Cali')
        g.addEdge(graph, 'Cali', 'Bogota')
        g.addEdge(graph, 'Yopal', 'Medellin')
        g.addEdge(graph, 'Medellin', 'Pasto')
        g.addEdge(graph, 'Pasto', 'Bogota')
        g.addEdge(graph, 'Cali', 'Pasto')
        g.addEdge(graph, 'Cali', 'Barranquilla')
        g.addEdge(graph, 'Barranquilla', 'Manizales')
        g.addEdge(graph, 'Pasto', 'Manizales')

        self.assertEqual(g.numEdges(graph), 12)
        self.assertEqual(g.numVertex(graph), 7)

        lst = g.adjacents(graph, 'Bogota')
        self.assertEqual(lt.size(lst), 4)

        self.assertTrue(lt.isPresent(lst, 'Cali', self.comparelst))
        self.assertTrue(lt.isPresent(lst, 'Yopal', self.comparelst))
        self.assertTrue(lt.isPresent(lst, 'Pasto', self.comparelst))
        self.assertTrue(lt.isPresent(lst, 'Medellin', self.comparelst))
        self.assertFalse(lt.isPresent(lst, 'Barranquilla', self.comparelst))

        lst = g.adjacents(graph, 'Manizales')
        self.assertEqual(lt.size(lst), 0)
 def dfs(self, graph, vert, marked, pre, post, reversepost):
     """
       Implementación del recorrido Depth First Search
     """
     q.enqueue(pre, vert)
     m.put(marked, vert, True)
     lstadjacents = g.adjacents(graph, vert)
     adjiterator = it.newIterator(lstadjacents)
     while it.hasNext(adjiterator):
         adjvert = it.next(adjiterator)
         if not m.contains(marked, adjvert):
             self.dfs(graph, adjvert, marked, pre, post, reversepost)
     q.enqueue(post, vert)
     s.push(reversepost, vert)
Beispiel #9
0
def bfs(search, source):
    queue = q.newQueue()
    q.enqueue(queue, source)
    while not (q.isEmpty(queue)):
        v = q.dequeue(queue)
        list_ad = g.adjacents(search['graph'], v)
        for i in range(1, (lt.size(list_ad) + 1)):
            w = lt.getElement(list_ad, i)
            if map.get(search['visitedMap'], w) == None:
                map.put(search['visitedMap'], w, {
                    'marked': True,
                    'edgeTo': None,
                    'nodo': w
                })
                q.enqueue(queue, w)
Beispiel #10
0
def newDijkstra(graph, s):
    """
    Crea una busqueda Dijkstra para un digrafo y un vertice origen
    """
    prime = nextPrime(g.numVertex(graph) * 2)
    search = {'graph': graph, 's': s, 'visitedMap': None, 'minpq': None}
    search['visitedMap'] = map.newMap(capacity=prime,
                                      maptype='PROBING',
                                      comparefunction=graph['comparefunction'])
    vertices = g.vertices(graph)
    itvertices = it.newIterator(vertices)
    while (it.hasNext(itvertices)):
        vert = it.next(itvertices)
        map.put(search['visitedMap'], vert, {
            'marked': False,
            'edgeTo': None,
            'distTo': math.inf
        })
    map.put(search['visitedMap'], s, {
        'marked': True,
        'edgeTo': None,
        'distTo': 0
    })
    pq = minpq.newIndexMinPQ(g.numVertex(graph), comparenames)
    search['minpq'] = pq
    minpq.insert(search['minpq'], s, 0)
    while not minpq.isEmpty(search['minpq']):
        v = minpq.delMin(pq)
        if not g.containsVertex(graph, v):
            raise Exception("Vertex [" + v + "] is not in the graph")
        elif g.containsVertex(graph, v):
            adj = g.adjacents(graph, v)
            adj_it = it.newIterator(adj)
            while it.hasNext(adj_it):
                w = it.next(adj_it)
                edge = g.getEdge(graph, v, w)
                relax(search, edge)
        # obtener los enlaces adjacentes de v
        # Iterar sobre la lista de enlaces
        # Relajar (relax) cada enlace
    return search
    def reverse(self, graph):
        """
         Retornar el reverso del grafo graph
        """
        greverse = g.newGraph(12, self.comparenames, directed=True)

        lstvert = g.vertices(graph)
        itervert = it.newIterator(lstvert)
        while it.hasNext(itervert):
            vert = it.next(itervert)
            g.insertVertex(greverse, vert)

        itervert = it.newIterator(lstvert)
        while it.hasNext(itervert):
            vert = it.next(itervert)
            lstadj = g.adjacents(graph, vert)
            iteradj = it.newIterator(lstadj)
            while it.hasNext(iteradj):
                adj = it.next(iteradj)
                g.addEdge(greverse, adj, vert)
        return greverse
Beispiel #12
0
    def test_addEdges(self):
        graph = g.newGraph(7, self.comparenames)

        g.insertVertex(graph, 'Bogota')
        g.insertVertex(graph, 'Yopal')
        g.insertVertex(graph, 'Cali')
        g.insertVertex(graph, 'Medellin')
        g.insertVertex(graph, 'Pasto')
        g.insertVertex(graph, 'Barranquilla')
        g.insertVertex(graph, 'Manizales')

        g.addEdge(graph, 'Bogota', 'Yopal')
        g.addEdge(graph, 'Bogota', 'Medellin')
        g.addEdge(graph, 'Bogota', 'Pasto')
        g.addEdge(graph, 'Bogota', 'Cali')
        g.addEdge(graph, 'Yopal', 'Medellin')
        g.addEdge(graph, 'Medellin', 'Pasto')
        g.addEdge(graph, 'Cali', 'Pasto')
        g.addEdge(graph, 'Cali', 'Barranquilla')
        g.addEdge(graph, 'Barranquilla', 'Manizales')
        g.addEdge(graph, 'Pasto', 'Manizales')

        self.assertEqual(g.numEdges(graph), 10)
        self.assertEqual(g.numVertex(graph), 7)

        lst = g.vertices(graph)
        self.assertEqual(lt.size(lst), 7)

        lst = g.edges(graph)
        self.assertEqual(lt.size(lst), 10)

        degree = g.degree(graph, 'Bogota')
        self.assertEqual(degree, 4)

        edge = g.getEdge(graph, 'Bogota', 'Medellin')

        lst = g.adjacents(graph, 'Bogota')
        self.assertEqual(lt.size(lst), 4)
Beispiel #13
0
    def test_adjacents(self):
        graph = g.newGraph(7,self.comparenames)

        g.insertVertex (graph, 'Bogota')
        g.insertVertex (graph, 'Yopal')
        g.insertVertex (graph, 'Cali')
        g.insertVertex (graph, 'Medellin')
        g.insertVertex (graph, 'Pasto')
        g.insertVertex (graph, 'Barranquilla')
        g.insertVertex (graph, 'Manizales')

        g.addEdge (graph, 'Bogota', 'Yopal')
        g.addEdge (graph, 'Bogota', 'Medellin')
        g.addEdge (graph, 'Bogota', 'Pasto')
        g.addEdge (graph, 'Bogota', 'Cali')
        g.addEdge (graph, 'Yopal', 'Medellin')
        g.addEdge (graph, 'Medellin', 'Pasto')
        g.addEdge (graph, 'Cali', 'Pasto')
        g.addEdge (graph, 'Cali', 'Barranquilla')
        g.addEdge (graph, 'Barranquilla','Manizales')
        g.addEdge (graph, 'Pasto','Manizales')

        lst=g.adjacents(graph,'Bogota')
        self.assertEqual(lt.size(lst),4)