C/Visual C - Código en C o C++ del DFS y BFS

 
Vista:

Código en C o C++ del DFS y BFS

Publicado por reggie (1 intervención) el 30/10/2002 15:59:11
Hola, a ver si alguien es tan amable de pasarme el código de estos dos algoritmos de ordenación de grafos en C o C++ o si sabe de algun apersona o página donde esten implementados
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación de algoritmos DFS y BFS en C++

Publicado por Alejandro (913 intervenciones) el 31/03/2025 17:21:03
Aquí tienes ejemplos de implementación de los algoritmos de búsqueda en profundidad (DFS) y búsqueda en amplitud (BFS) en C++. Ambos algoritmos son fundamentales para la exploración de grafos.

Código en C++ para DFS (búsqueda en profundidad)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <vector>
 
using namespace std;
 
class Grafo {
    int V; // Número de vértices
    vector<vector<int>> adj; // Lista de adyacencia
 
public:
    Grafo(int V) {
        this->V = V;
        adj.resize(V);
    }
 
    void agregarArista(int v, int w) {
        adj[v].push_back(w); // Agregar w a la lista de v
    }
 
    void DFSUtil(int v, vector<bool>& visitado) {
        visitado[v] = true; // Marcar el vértice como visitado
        cout << v << " "; // Procesar el vértice
 
        // Recorrer todos los vértices adyacentes
        for (int i : adj[v]) {
            if (!visitado[i]) {
                DFSUtil(i, visitado);
            }
        }
    }
 
    void DFS(int v) {
        vector<bool> visitado(V, false); // Inicializar todos los vértices como no visitados
        DFSUtil(v, visitado);
    }
};
 
int main() {
    Grafo g(5); // Crear un grafo con 5 vértices
    g.agregarArista(0, 1);
    g.agregarArista(0, 2);
    g.agregarArista(1, 3);
    g.agregarArista(1, 4);
    g.agregarArista(2, 4);
 
    cout << "DFS comenzando desde el vértice 0:\n";
    g.DFS(0);
 
    return 0;
}

Código en C++ para BFS (búsqueda en amplitud)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <vector>
#include <queue>
 
using namespace std;
 
class Grafo {
    int V; // Número de vértices
    vector<vector<int>> adj; // Lista de adyacencia
 
public:
    Grafo(int V) {
        this->V = V;
        adj.resize(V);
    }
 
    void agregarArista(int v, int w) {
        adj[v].push_back(w); // Agregar w a la lista de v
    }
 
    void BFS(int s) {
        vector<bool> visitado(V, false); // Inicializar todos los vértices como no visitados
        queue<int> cola; // Cola para BFS
 
        visitado[s] = true; // Marcar el vértice inicial como visitado
        cola.push(s); // Encolar el vértice inicial
 
        while (!cola.empty()) {
            s = cola.front();
            cout << s << " "; // Procesar el vértice
            cola.pop();
 
            // Recorrer todos los vértices adyacentes
            for (int i : adj[s]) {
                if (!visitado[i]) {
                    visitado[i] = true; // Marcar como visitado
                    cola.push(i); // Encolar el vértice
                }
            }
        }
    }
};
 
int main() {
    Grafo g(5); // Crear un grafo con 5 vértices
    g.agregarArista(0, 1);
    g.agregarArista(0, 2);
    g.agregarArista(1, 3);
    g.agregarArista(1, 4);
    g.agregarArista(2, 4);
 
    cout << "BFS comenzando desde el vértice 0:\n";
    g.BFS(0);
 
    return 0;
}

Explicación



- DFS: Utiliza una función recursiva para explorar cada vértice y sus adyacentes. Marca los vértices visitados para evitar ciclos.
- BFS: Utiliza una cola para explorar los vértices nivel por nivel, comenzando desde un vértice inicial.

Puedes compilar y ejecutar estos códigos en cualquier entorno de desarrollo de C++. ¡Espero que esto te ayude, Reggie!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar