Ho fatto un tutorial in OCaml (non chiedermi perché, ho appena deciso di espandere la mia conoscenza delle lingue, credo) e sono arrivato al punto in cui sono lavorare con i grafici. Il tutorial mi ha insegnato come eseguire una ricerca in ampiezza su un grafico, che posso implementare correttamente. Tuttavia, ho lottato con un algoritmo per una ricerca approfondita, che è una di quelle cose in cui il tutorial va, "Ti suggeriamo di provare questo metodo in profondità, ma non ti diremo come fallo."OCAML Depth-First Search
Sto cercando di implementarlo in questo modo: let rec dfs graph start end
. Vale a dire, ho cercato di farlo in un elenco di spigoli(), un nodo iniziale (start
) e un nodo finale (end
).
ho creato il mio grafico utilizzando un elenco di bordi ...
let edges = [
("a", "b"); ("a", "c");
("a", "d"); ("b", "e");
("c", "f"); ("d", "e");
("e", "f"); ("e", "g")
];;
Tuttavia, io sono totalmente perso su dove andare da qui. Qualche consiglio su come farmi andare? Grazie.
Il normale riepilogo di una frase è che la ricerca in profondità è uguale alla ricerca in larghezza, tranne che si sostituisce la coda di nodi non visitati con uno stack. Potresti provare a modificare la tua implementazione di ricerca in ampiezza in questo modo. –
Una funzione per elencare i successori di un nodo può semplificarti le cose. – PatJ