2011-01-17 4 views
6

Sto utilizzando BGL per memorizzare il mio DAG. I vertici hanno stati. Dato un cambiamento di stato in uno dei vertici voglio aggiornare i vertici dipendenti. Questo sono in grado di fare utilizzando boost :: depth_first_search e un visitatore personalizzato.Stop boost :: depth_first_search lungo una determinata profondità se vengono soddisfatti determinati criteri

Ora la logica è che non desidero aggiornare un vertice cercato e il suo dipendente se il vertice si trova in uno stato particolare. Fondamentalmente voglio controllare l'en-queuing dei vertici in dfs o bfs. Qual è il modo migliore per ottenere questo in BGL.

Grazie.

risposta

9

Sembra che boost :: depth_first_search non supporti questo, ma il boost sottostante :: depth_first_visit fa, attraverso il suo secondo sovraccarico che consente una "funzione di terminazione" (TerminatorFunc).

Quindi è possibile copiare l'implementazione di boost :: depth_first_search e sostituire il parametro detail :: nontruth2() passato a boost :: depth_first_visit con la propria funzione di terminazione (non banale).

+0

Grazie, funziona. – Vikas

0

Mancanza di terminazione in profondità-prima-ricerca - è la cosa più stupida nella libreria di grafi che abbia mai visto.

Può essere, questa potrebbe essere la via d'uscita: depth_first_search su filtered_graph. È possibile contrassegnare il vertice di arresto in qualche modo, e nella funzione di filtro-bordi di filtered_graph è sufficiente nascondere i bordi dell'incidente.