예제 #1
0
def GrafosPorCiclo(analyzer, origen, VDC):
    """
    Genera un grafo por cada ciclo diferente relacionado al origen y los añade a
    GPCC (diccionario)
    """
    #GPCC = Grafos Por Cada Ciclo
    GPCC = {}
    if VDC == False:
        return False
    else:
        for Valor in VDC:
            Cierre = False
            GPCC[Valor] = gr.newGraph(datastructure="ADJ_LIST",
                                        directed=True,
                                        size=6,
                                        comparefunction=comparer)
            gr.insertVertex(GPCC[Valor], origen)
            actual = origen
            mismo = origen
            Adjacentes = adj.adjacents(analyzer["graph"], actual)
            Adjacentes["cmpfunction"] = comparador
            while Cierre == False:
                a = it.newIterator(VDC[Valor])
                while it.hasNext(a):
                    b = it.next(a)
                    if actual != mismo:
                        Adjacentes = adj.adjacents(analyzer["graph"], actual)
                        Adjacentes["cmpfunction"] = comparador
                        mismo = actual
                    if not gr.containsVertex(GPCC[Valor], b):
                        if lt.isPresent(Adjacentes, origen) != 0 and actual != origen and b != origen:
                            gr.insertVertex(GPCC[Valor], b)
                            Tartalia = gr.getEdge(analyzer["graph"], actual, origen)
                            Peso = int(ed.weight(Tartalia)/Tartalia["Repeticiones"])
                            adj.addEdge(GPCC[Valor], actual, origen, Peso)
                            actual = b
                            Cierre = True
                        elif lt.isPresent(Adjacentes, b) != 0 and b != origen:
                            gr.insertVertex(GPCC[Valor], b)
                            Tartalia = gr.getEdge(analyzer["graph"], actual, b)
                            Peso = int(ed.weight(Tartalia)/Tartalia["Repeticiones"])
                            adj.addEdge(GPCC[Valor], actual, b, Peso)
                            actual = b  
                    elif actual == origen and lt.size(VDC[Valor]) == 1:
                            Cierre = True       
        return GPCC
예제 #2
0
def addEdge(graph, vertexa, vertexb, weight):
    """
    Agrega un arco entre los vertices vertexa ---- vertexb, con peso weight.
    Si el grafo es no dirigido se adiciona dos veces el mismo arco,
    en el mismo orden
    Si el grafo es dirigido se adiciona solo el arco vertexa --> vertexb
    Args:
        graph: El grafo sobre el que se ejecuta la operacion
        vertexa: Vertice de inicio
        vertexb: Vertice de destino
        wight: peso del arco
    Returns:
       True si el vertice esta presente
    Raises:
        Exception
    """
    if (graph['type'] == "ADJ_LIST"):
        return alt.addEdge(graph, vertexa, vertexb, weight)