Adloun

Parcours en largeur

Exercice · OCaml (option informatique), chapitre 15 — Parcours de graphes

Énoncé

Écrire parcours_largeur adj depart (avec une file).

Corrigé

let parcours_largeur adj depart =
  let n = Array.length adj in
  let vu = Array.make n false in
  let f = Queue.create () in
  let ordre = ref [] in
  vu.(depart) <- true;
  Queue.push depart f;
  while not (Queue.is_empty f) do
    let s = Queue.pop f in
    ordre := s :: !ordre;
    List.iter (fun v ->
      if not vu.(v) then begin vu.(v) <- true; Queue.push v f end
    ) adj.(s)
  done;
  !ordre

La file impose l'ordre « premier découvert, premier traité » : les sommets sortent par distance croissante au départ.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.