Cómo encontrar qué vértices están en un ciclo de gráfico
Frecuentes
Visto 1,704 veces
1
p.ej. para 1->2, 2->3, 3->4, 4->2, quiero imprimir 2, 3, 4. Probé DFS, y cuando encontré el vértice que visité antes, voy al padre hasta que no obtenga este vértice, pero no funciona bien. A veces entra en un bucle infinito.
Ejecutar dfs:
int i;
for (i = 0; i < MAX_VER; i += 1)
if (ver[i].v == 0 && ver[i].nb > 0)
dfs(i);
df:
ver[v].v = 1;
int i;
for (i = 0; i < ver[v].nb; i += 1) {
ver[ver[v].to[i]].p = v;
if (ver[ver[v].to[i]].v == 0)
dfs(ver[v].to[i]);
else
// cycle found
printCycle(ver[v].to[i]);
}
y ciclo de impresión:
printf("\cycle: %d ", v);
int p = ver[v].p;
while (p != v) {
printf("%d(%d) ", p, v);
p = ver[p].p;
}
printf("\n");
Estructura de vértice:
int *to; // neighbor list
int nb; // how many neighbor
int p; // parent
short v; // was visited? 0 = false, 1 = true
2 Respuestas
1
Parece que está buscando "Componentes fuertemente conectados", por lo que tiene suerte, existe un algoritmo bien conocido para encontrarlos en un gráfico. Ver Tarjan.
El algoritmo está bastante bien descrito en ese artículo, pero es un poco extenso, así que no lo pegaré aquí. Además, a menos que esté haciendo esto para estudiar, probablemente será mejor que use una implementación existente, no es que difícil de implementar pero no lo es que fácil tampoco.
EDITAR. Parece que esta pregunta es en realidad un engaño... me duele decir esto, pero probablemente deba cerrarse, lo siento. Ver El mejor algoritmo para detectar ciclos en un gráfico dirigido
contestado el 23 de mayo de 17 a las 13:05
0
Debe usar la coloración de vértices para evitar bucles infinitos en DFS. Al principio todos los vértices están marcados como BLANCOS. Cuando descubre un vértice por primera vez (está marcado como BLANCO), debe marcarlo como GRIS. Si descubriera un vértice GRIS, encontraría un bucle.
contestado el 03 de mayo de 12 a las 11:05
¿Y cómo te dice esto qué vértices están en el ciclo? - usuario395760
Puede usar std::map o std::unordered_map para contener el tipo de vértice. - Aligus
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas algorithm graph graph-algorithm or haz tu propia pregunta.
posible duplicado de El mejor algoritmo para detectar ciclos en un gráfico dirigido - Steve