def DepthFirstSearchSCC(graph, source, SCC): """ Genera un recorrido DFS sobre el grafo graph Args: graph: El grafo a recorrer source: Vertice de inicio del recorrido. Returns: Una estructura para determinar los vertices conectados a source Raises: Exception """ try: search = { 'source': source, 'visited': None, } search['visited'] = map.newMap(numelements=g.numVertices(graph), maptype='PROBING', comparefunction=graph['comparefunction'] ) map.put(search['visited'], source, {'marked': True, 'edgeTo': None}) dfsVertexSCC(search, graph, source, SCC) return search except Exception as exp: error.reraise(exp, 'dfs:DFSSCC')
def dfsVertexCicles(search, graph, vertex): """ Funcion auxiliar para calcular un recorrido DFS Args: search: Estructura para almacenar el recorrido vertex: Vertice de inicio del recorrido. Returns: Una estructura para determinar los vertices conectados a source Raises: Exception """ try: search = { 'source': source, 'visited': None, "camino":{} } search['visited'] = map.newMap(numelements=g.numVertices(graph), maptype='PROBING', comparefunction=graph['comparefunction'] ) map.put(search['visited'], source, {'marked': True, 'edgeTo': None}) dfsVertex2(search,graph,source,time) return search except Exception as exp: error.reraise(exp, 'dfs:DFS') ruta = 0 adjlst = g.adjacents(graph, vertex) adjslstiter = it.newIterator(adjlst) while (it.hasNext(adjslstiter)): w = it.next(adjslstiter) visited = map.get(search['visited'], w) if visited == vertex: ruta += 1 map.put(search['cicles'], str(ruta), search['visited']) if visited is None: map.put(search['visited'], w, {'marked': True, 'edgeTo': vertex}) dfsVertex(search, graph, w) return search except Exception as exp: error.reraise(exp, 'dfs:dfsVertex')
def numVertices(graph): """ Retorna el numero de vertices en el grafo graph Args: graph: El grafo sobre el que se ejecuta la operacion Returns: El numero de vertices Raises: Exception """ if (graph['type'] == "ADJ_LIST"): return alt.numVertices(graph)
def DepthFirstSearch2(graph, source, components): """ Genera un recorrido DFS sobre el grafo graph Args: graph: El grafo a recorrer source: Vertice de inicio del recorrido. Returns: Una estructura para determinar los vertices conectados a source Raises: Exception """ try: search = { 'source': source, 'visited': None, } search['visited'] = map.newMap( numelements=g.numVertices(graph), maptype='PROBING', comparefunction=graph['comparefunction']) path = stk.newStack() cycles = [[]] weights = [0] map.put(search['visited'], source, {'marked': True, 'edgeTo': None}) dfs_extra(search, graph, source, components, path, cycles, weights) cycles.pop() weights.pop() for i in range(len(weights)): weights[i] return (cycles, weights) except Exception as exp: error.reraise(exp, 'dfs:DFS')
def DepthFirstSearch2(graph, source,time): """ Genera un recorrido DFS sobre el grafo graph Args: graph: El grafo a recorrer source: Vertice de inicio del recorrido. try: dfs = { 'source': source, 'visited': None, 'cicles' : None } dfs['visited'] = map.newMap(numelements=g.numVertices(graph), maptype='PROBING', comparefunction=graph['comparefunction'] ) dfs['cicles'] = map.newMap(numelements=g.numVertices(graph), maptype='PROBING', comparefunction=graph['comparefunction'] ) map.put(dfs['visited'], source, {'marked': True, 'edgeTo': None}) dfsVertex(dfs, graph, source) return dfs except Exception as exp: error.reraise(exp, 'dfs:DFS')