Implementación de grafos usando STL para programación competitiva | Conjunto 1 (DFS de no ponderado y no dirigido) – Part 1

Hemos introducido los conceptos básicos de Graph en Graph y sus representaciones

En esta publicación, se usa una representación diferente basada en STL que puede ser útil para implementar rápidamente gráficos usando vectores . La implementación es para la representación de lista de adyacencia del gráfico. 

El siguiente es un ejemplo de gráfico no dirigido y no ponderado con 5 vértices.  

8

A continuación se muestra una representación de lista de adyacencia del gráfico.  

9 (1)

Usamos vectores en STL para implementar gráficos usando representación de lista de adyacencia. 

  • vector: Un contenedor de secuencias. Aquí lo usamos para almacenar listas de adyacencia de todos los vértices. Usamos números de vértice como índice en este vector.

La idea es representar un gráfico como una array de vectores tal que cada vector represente la lista de adyacencia de un vértice. A continuación se muestra un programa completo en C++ basado en STL para DFS Traversal

Implementación:

C++

// A simple representation of graph using STL,
// for the purpose of competitive programming
#include<bits/stdc++.h>
using namespace std;
 
// A utility function to add an edge in an
// undirected graph.
void addEdge(vector<int> adj[], int u, int v)
{
    adj[u].push_back(v);
    adj[v].push_back(u);
}
 
// A utility function to do DFS of graph
// recursively from a given vertex u.
void DFSUtil(int u, vector<int> adj[],
                    vector<bool> &visited)
{
    visited[u] = true;
    cout << u << " ";
    for (int i=0; i<adj[u].size(); i++)
        if (visited[adj[u][i]] == false)
            DFSUtil(adj[u][i], adj, visited);
}
 
// This function does DFSUtil() for all
// unvisited vertices.
void DFS(vector<int> adj[], int V)
{
    vector<bool> visited(V, false);
    for (int u=0; u<V; u++)
        if (visited[u] == false)
            DFSUtil(u, adj, visited);
}
 
// Driver code
int main()
{
    int V = 5;
 
    // The below line may not work on all
    // compilers.  If it does not work on
    // your compiler, please replace it with
    // following
    // vector<int> *adj = new vector<int>[V];
    vector<int> adj[V];
 
    // Vertex numbers should be from 0 to 4.
    addEdge(adj, 0, 1);
    addEdge(adj, 0, 4);
    addEdge(adj, 1, 2);
    addEdge(adj, 1, 3);
    addEdge(adj, 1, 4);
    addEdge(adj, 2, 3);
    addEdge(adj, 3, 4);
    DFS(adj, V);
    return 0;
}

Python3

# A simple representation of graph using STL,
# for the purpose of competitive programming
 
# A utility function to add an edge in an
# undirected graph.
def addEdge(adj, u, v):
    adj[u].append(v)
    adj[v].append(u)
    return adj
 
# A utility function to do DFS of graph
# recursively from a given vertex u.
def DFSUtil(u, adj, visited):
    visited[u] = True
    print(u, end = " ")
    for i in range(len(adj[u])):
        if (visited[adj[u][i]] == False):
            DFSUtil(adj[u][i], adj, visited)
 
# This function does DFSUtil() for all
# unvisited vertices.
def DFS(adj, V):
    visited = [False]*(V+1)
 
    for u in range(V):
        if (visited[u] == False):
            DFSUtil(u, adj, visited)
 
# Driver code
if __name__ == '__main__':
    V = 5
 
    # The below line may not work on all
    # compilers.  If it does not work on
    # your compiler, please replace it with
    # following
    # vector<int> *adj = new vector<int>[V]
    adj = [[] for i in range(V)]
 
    # Vertex numbers should be from 0 to 4.
    adj = addEdge(adj, 0, 1)
    adj = addEdge(adj, 0, 4)
    adj = addEdge(adj, 1, 2)
    adj = addEdge(adj, 1, 3)
    adj = addEdge(adj, 1, 4)
    adj = addEdge(adj, 2, 3)
    adj = addEdge(adj, 3, 4)
    DFS(adj, V)
 
# This code is contributed by mohit kumar 29.

Javascript

<script>
// A simple representation of graph using STL,
// for the purpose of competitive programming
     
     
    // A utility function to add an edge in an
// undirected graph.
    function addEdge(adj,u,v)
    {
        adj[u].push(v);
        adj[v].push(u);
    }
     
    // A utility function to do DFS of graph
// recursively from a given vertex u.
    function DFSUtil(u,adj,visited)
    {
        visited[u] = true;
        document.write(u+" ");
    for (let i=0; i<adj[u].length; i++)
        if (visited[adj[u][i]] == false)
            DFSUtil(adj[u][i], adj, visited);
    }
     
    // This function does DFSUtil() for all
// unvisited vertices.
    function DFS(adj,V)
    {
        let visited=new Array(V);
        for(let i=0;i<V;i++)
        {
            visited[i]=false;
        }
    for (let u=0; u<V; u++)
        if (visited[u] == false)
            DFSUtil(u, adj, visited);
    }
     
    // Driver code
    let V = 5;
     
    // The below line may not work on all
    // compilers.  If it does not work on
    // your compiler, please replace it with
    // following
    // vector<int> *adj = new vector<int>[V];
    let adj=new Array(V);
    for(let i=0;i<V;i++)
    {
        adj[i]=[];
    }
     
    // Vertex numbers should be from 0 to 4.
    addEdge(adj, 0, 1);
    addEdge(adj, 0, 4);
    addEdge(adj, 1, 2);
    addEdge(adj, 1, 3);
    addEdge(adj, 1, 4);
    addEdge(adj, 2, 3);
    addEdge(adj, 3, 4);
    DFS(adj, V);
     
     
     
    // This code is contributed by unknown2108
</script>
Producción

0 1 2 3 4 

A continuación se muestran artículos relacionados:  
Implementación de gráficos usando STL para programación competitiva | Conjunto 2 (Gráfico ponderado)  
Algoritmo de la ruta más corta de Dijkstra usando la cola de prioridad de STL Algoritmo de  
la ruta más corta de Dijkstra usando la configuración en STL  
Árbol de expansión mínimo de Kruskal usando STL en C++  
Algoritmo de Prim usando la cola de prioridad en STL

Este artículo es una contribución de Shubham Gupta . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *