Trier les arêtes de E par valuation croissante dans un tableau T;
Initialiser une partition P composée des n singletons de V;
F← ∅;
Tantque F contient moins de n−1 arêtes
faire
Prendre dans T l'arête suivante xy;
Si les classes de x et y dans P sont différentes
alors
fusionner les classes de x et de y;
F← F∪{xy}.
Chaque sommet de V forme un sous-arbre isolé;
Tantque cette forêt ne forme pas un arbre
faire
Choisir une arête incidente de valeur minimale à un des sous-arbres;
Ajouter cette arête à ce sous-arbre.
//
Création d'un graphe d'écart GE=(X,F,cmax)
F← E;
Pour a∈F
faire
f(a)← 0;
val(a)← cmax(a);
//
Améliorer le flot
Tantque il existe un chemin H dans F
faire
//
augmenter le flot
Pourchaque a∈H
faire
// arc "avançant"
Si a∈E alors f(a)← f(a)+min(val(e) | e∈H);
// arc "reculant"
Si ā∈E alors
f(a)← f(a)−min(val(e) | e∈H);
//
Mise à jour du graphe d'écart
Pour a∈H
faire
Si ā∈E
alors
e← ā;
Si a∈E
alors
e← a;
F← F−{a};
Si f(e)<cmax(e)
alors
F←F∪{e};
val(e)← cmax(e)−f(e);
Si f(e)>0
alors
F←F∪{ē};
val(ē)← f(e);