Adloun

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

Chemins de longueur 2

Graphes : modélisation et représentations · niveau 3 (difficile)

Énoncé

Écrire chemins_deux m renvoyant une matrice r telle que r.(i).(j) soit le nombre de chemins de longueur exactement de i à j.

Corrigé

let chemins_deux m =
  let n = Array.length m in
  let r = Array.make_matrix n n 0 in
  for i = 0 to n - 1 do
    for j = 0 to n - 1 do
      let c = ref 0 in
      for k = 0 to n - 1 do
        if m.(i).(k) && m.(k).(j) then c := !c + 1
      done;
      r.(i).(j) <- !c
    done
  done;
  r

Un chemin de longueur de i à j passe par un sommet intermédiaire k adjacent aux deux : on compte ces k. C'est exactement le carré de la matrice d'adjacence () : plus généralement, (M^p).(i).(j) compte les chemins de longueur p. Coût (un produit matriciel).

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre