2010-10-26 8 views
6

Una pregunta similar is posted here.Buscar todas las bases de ciclo en un gráfico, con las coordenadas vértice dadas

Tengo un gráfico no dirigido con Vertex V y Edge E. Estoy buscando un algoritmo para identificar todas las bases de ciclo en ese gráfico. Un ejemplo de un gráfico de este tipo se muestra a continuación:

alt text

Ahora, todas las coordenadas de vértices son conocido (a diferencia pregunta anterior, y contraria a la explicación en el diagrama anterior) Por lo tanto, es posible encontrar los ciclos más pequeños que abarcan todo el gráfico.

En este gráfico, es posible que haya bordes que no forman ningún ciclo.

¿Cuál es el mejor algoritmo para hacer esto?

Aquí es otro ejemplo de que se puede echar un vistazo a:

Suponiendo que e1 es el borde que es recogido en primer lugar, y la flecha muestra la dirección del borde.

+0

¿Es esta una pregunta C#? Probablemente pueda encontrar cualquier algoritmo general que resuelva su problema. –

+0

@mastoj, he editado la etiqueta. – Graviton

+0

cambiar mi alias ... ¿encontró una solución? ¿Mi algoritmo de sugestión funciona para usted? –

Respuesta

2

No he probado esto y es bastante codicioso pero debería funcionar:

  1. Escoja un nodo
  2. ir a uno de TI de los vecinos de
  3. seguir adelante hasta llegar de nuevo a su nodo de partida , pero no puedes visitar un nodo antiguo.
  4. Si obtiene un ciclo, guárdelo si aún no existe o un subconjunto de esos nodos constituye un ciclo. Si el nodo en el ciclo es un subconjunto de los nodos en otro ciclo, elimine el ciclo más grande (¿o tal vez se divida en dos?)
  5. Comience en 2 con un vecino nuevo.
  6. Comienza de nuevo en 1 con un nuevo nodo.

Comentarios: En 3 deberías, por supuesto, hacer lo mismo que para el paso 2, así que toma todos los caminos posibles.

Quizás eso sea un comienzo? Como dije, no lo he probado, así que no está optimizado.

EDIT: Una versión no documentada y no optimizada de una implementación del algoritmo se puede encontrar aquí: https://gist.github.com/750015. Pero no resuelve completamente la solución, ya que solo puede reconocer subconjuntos "verdaderos".

+0

@Thomas, realmente no funciona. Tengo mi propia solución personalizada. Gracias. – Graviton

+0

@Thomas, digamos que un nodo está conectado a varios bordes, ¿cómo se selecciona con edge para continuar? – Graviton

+0

@Ngu: no importa, se supone que debes visitar todos los bordes.Tenga en cuenta que no lo he implementado yo mismo, fue en cabañas algo que se me ocurrió. Pero creo que podría implementarse como una especie de algoritmo recursivo. También tenga en cuenta que el algoritmo no está optimizado, es bastante codicioso. –

Cuestiones relacionadas