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
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)