Exemplo n.º 1
0
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')
Exemplo n.º 2
0
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')
Exemplo n.º 3
0
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')
Exemplo n.º 5
0
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')