Une structure de données simple pour représenter un graphe est la
matrice d'adjacence
. Pour obtenir
, on numérote les sommets
du graphe de façon quelconque:

est une matrice carrée
dont les
c
fficients sont
et
telle que:

Ceci donne alors les déclarations de type et de variables suivantes en Pascal:
const
Nmax = 50; (* Nombre de sommets maximal pour un graphe *)
type
IntSom = 1..Nmax;
GrapheMat = array[IntSom, IntSom] of integer;
var
m: GrapheMat;
n: IntSom; (* $n$ est le nombre effectif de sommets *)
(* du graphe dont la matrice est $M$ *)
Figure: Un exemple de graphe et sa matrice d'adjacence
Un intérêt de cette représentation est que la détermination de
chemins dans
revient au calcul des puissances successives de la
matrice
, comme le montre le théorème suivant.

Preuve On effectue une récurrence sur
. Pour
le
résultat est immédiat car un chemin de longueur
est un arc du
graphe. Le calcul de
, pour
donne:

Or tout chemin de longueur
entre
et
se décompose en un chemin de longueur
entre
et un certain
suivi d'un arc reliant
et
.
Le résultat découle alors de l' hypothèse de récurrence
suivant laquelle
est le nombre de chemins de longueur
joignant
à
. 
De ce théorème on déduit l'algorithme suivant permettant de
tester l'existence d'un chemin entre deux sommets:
function ExisteChemin (i, j: IntSom; n: integer; m: GrapheMat): boolean;
var
k: integer;
u, v, w: GrapheMat;
begin
u := m;
for k := 1 to n do
begin
Multiplier(n, u, m, v);
Ajouter(n, u, v, w);
u := w;
end;
ExisteChemin := (u[i, j] <> 0);
end;
Dans cet algorithme, les procédures Multiplier(n, u, v, w) et
Ajouter(n, u, v, w) sont
respectivement
des procédures qui multiplient et ajoutent les deux matrices
u et v pour obtenir la matrice w.
Remarques
et d'extrémité
implique
celle d'un tel chemin ayant une longueur inférieure au nombre total
de sommets du graphe.
car le produit de deux matrices carrées
demande
opérations et l'on peut être amené à
effectuer
produits de matrices. La recherche du meilleur
algorithme possible pour le calcul du produit de deux matrices a
été très intense ces dernières années et plusieurs
améliorations de l'algorithme élémentaire demandant
multiplications ont été successivement trouvées, et il est rare
qu'une année se passe sans que quelqu'un n'améliore la borne.
Coppersmith et Winograd ont ainsi proposé un algorithme en
; mais ceci est un résultat de nature théorique car la
programmation de l'algorithme de Coppersmith et Winograd est loin
d'être aisée et l'efficacité espérée n'est atteinte que pour
des valeurs très grandes de
. Il est donc nécessaire de
construire d'autres algorithmes, faisant intervenir des notions
différentes.
et
). Dans le cas
où on se limite à la recherche de l'existence d'un chemin entre deux
sommets donnés (et si ceci ne sera fait qu'une seule fois) on peut ne
calculer qu'une ligne de la matrice, ce qui diminue notablement la
complexité.