2010-10-26 16 views
6

Una domanda simile is posted here.Trova tutte le basi del ciclo in un grafico, con le coordinate del vertice fornite

Ho un grafico non orientato con Vertex V e Edge E. Sto cercando un algoritmo per identificare tutte le basi del ciclo in quel grafico. Un esempio di tale grafico è mostrato sotto:

alt text

Ora, tutte le coordinate dei vertici sono noto (differenza precedente domanda, e contraria alla spiegazione nel diagramma sopra) , quindi è possibile trovare i cicli più piccoli che racchiudono l'intero grafico.

In questo grafico, è possibile che ci siano bordi che non formano alcun ciclo.

Qual è il miglior algoritmo per farlo?

Ecco un altro esempio che si può dare un'occhiata a:

Supponendo che e1 è il bordo che viene raccolto prima, e la freccia indica la direzione del bordo.

+0

Questa è una domanda C#? Probabilmente potresti trovare qualsiasi algoritmo generale che risolva il tuo problema. –

+0

@mastoj, ho modificato il tag. – Graviton

+0

cambia il mio alias ... hai trovato una soluzione? Il mio algoritmo di suggerimento ha funzionato per te? –

risposta

2

Non ho provato questo ed è piuttosto avido, ma dovrebbe funzionare:

  1. Scegli un nodo
  2. andare in uno Si trova ad vicini
  3. andare avanti fino a tornare al nodo di partenza , ma non ti è permesso visitare un vecchio nodo.
  4. Se si ottiene un ciclo, salvarlo se non esiste già o un sottoinsieme di quei nodi costituisce un ciclo. Se il nodo nel ciclo è un sottoinsieme dei nodi in un altro ciclo, rimuovere il ciclo più grande (o forse dividerlo in due?)
  5. Ricominciare da capo a 2 con un nuovo vicino.
  6. Ricominciare da 1 con un nuovo nodo.

Commenti: A 3 si dovrebbe ovviamente fare la stessa cosa del punto 2, quindi prendere tutti i percorsi possibili.

Forse è un inizio? Come ho detto, non l'ho provato, quindi non è ottimizzato.

MODIFICA: Una versione non documentata e non ottimizzata di un'implementazione dell'algoritmo può essere trovata qui: https://gist.github.com/750015. Ma, non risolve completamente la soluzione poiché può solo riconoscere i "veri" sottoinsiemi.

+0

@Thomas, non funziona davvero. Ho una mia soluzione personalizzata. Grazie. – Graviton

+0

@Thomas, diciamo che un nodo è collegato a più spigoli, quindi come si seleziona con lo spigolo per continuare? – Graviton

+0

@Ngu: non importa, dovresti visitare tutti i bordi.Si noti che non l'ho implementato da solo, sono state le capanne che mi sono venute in mente. Ma penso che potrebbe essere implementato come una sorta di algoritmo ricorsivo. Si noti inoltre che l'algoritmo non è ottimizzato, è piuttosto avido. –

Problemi correlati