Adloun

OCaml (option informatique) · Chapitre 15 · Exercice de TD

Distances depuis un sommet

Parcours de graphes · niveau 2

Énoncé

Écrire distances adj depart et expliquer pourquoi il donne les plus courts chemins.

Corrigé

let distances adj depart =
  let n = Array.length adj in
  let dist = Array.make n (-1) in
  let f = Queue.create () in
  dist.(depart) <- 0;
  Queue.push depart f;
  while not (Queue.is_empty f) do
    let s = Queue.pop f in
    List.iter (fun v ->
      if dist.(v) = -1 then begin dist.(v) <- dist.(s) + 1; Queue.push v f end
    ) adj.(s)
  done;
  dist

Le BFS traite les sommets par distance croissante : quand on atteint v pour la première fois, c'est par le plus court chemin, et dist.(v) = dist.(s) + 1. Les sommets inatteignables gardent -1.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre