grafos dirigidos aciclicos
Publicado por jorge (1 intervención) el 26/03/2005 22:23:25
necesito que me yuden con los GDA necesito una idea para hacer grafos de estos en c++
Valora esta pregunta


0
#include <iostream>
#include <vector>
#include <list>
using namespace std;
class GrafoDirigidoAciclico {
public:
int V; // Número de vértices
vector<list<int>> adyacencias; // Lista de adyacencias
GrafoDirigidoAciclico(int vertices) : V(vertices), adyacencias(vertices) {}
void agregarArista(int origen, int destino) {
adyacencias[origen].push_back(destino);
}
// Implementa métodos adicionales según sea necesario
};
int main() {
// Ejemplo de creación de un Grafo Dirigido Acíclico
GrafoDirigidoAciclico gda(5);
gda.agregarArista(0, 1);
gda.agregarArista(0, 2);
gda.agregarArista(1, 3);
gda.agregarArista(2, 4);
// Puedes agregar más aristas según tus necesidades
return 0;
}
#include <vector>
#include <list>
#include <stack>
using namespace std;
class GrafoDirigidoAciclico {
// ... (como se definió anteriormente)
public:
bool tieneCiclos() {
vector<int> visitado(V, 0); // 0: No visitado, 1: En proceso, 2: Visitado
stack<int> pila;
for (int i = 0; i < V; ++i) {
if (visitado[i] == 0 && tieneCiclosUtil(i, visitado, pila)) {
return true;
}
}
return false;
}
private:
bool tieneCiclosUtil(int v, vector<int>& visitado, stack<int>& pila) {
visitado[v] = 1; // En proceso
for (int vecino : adyacencias[v]) {
if (visitado[vecino] == 0 && tieneCiclosUtil(vecino, visitado, pila)) {
return true;
}
else if (visitado[vecino] == 1) {
return true; // Ciclo detectado
}
}
visitado[v] = 2; // Visitado
pila.push(v);
return false;
}
};