1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
%- Problème du plus court chemin
%- 8
%- A ----------------- B
%- - ---- 4
%- - 2 -----
%- - 9 ------
%- C ------------------------------- F
%- - - -----
%- 5 - --- 6 -----
%- - --- ----- 8
%- D ------- E -----
%- 3
distance(areteA, areteB, 8)->;
distance(areteA, areteC, 2)->;
distance(areteB, areteF, 4)->;
distance(areteC, areteD, 5)->;
distance(areteC, areteE, 6)->;
distance(areteC, areteF, 9)->;
distance(areteD, areteE, 3)->;
distance(areteE, areteF, 8)->;
plus_court_chemin(x, y, s)->
findall(c, chemin_sans_boucles(x, y, nil, c), l)
trier(l, s.l');
chemin_sans_boucles(x, x, p, <x.nil, 0>)->;
chemin_sans_boucles(x, y, p, <x.l, d_ist>)->
distance(x, z, d)
hors_de(z, p)
chemin_sans_boucles(z, y, x.p, <l, d'>)
val(d+d', d_ist);
chemin_sans_boucles(x, y, p, <x.l, d_ist>)->
distance(z, x, d)
hors_de(z, p)
chemin_sans_boucles(z, y, x.p, <l, d'>)
val(d+d', d_ist);
%- tri par ordre croissant
trier(nil, nil)->;
trier(<x, d>.l, m)->
trier(l, l')
inserer_bon_endroit(<x, d>, l', m);
inserer_bon_endroit(<x, d>, nil, <x, d>.nil)->;
inserer_bon_endroit(<x, d>, <y, d'>.l, <x, d>.<y, d'>.l)->
val(d '<' d', 1)!;
inserer_bon_endroit(<x, d>, <y, d'>.l, <y, d'>.m)->
inserer_bon_endroit(<x, d>, l, m);
hors_de(x, nil)->;
hors_de(x, y.l)->
dif(x, y)
hors_de(x, l);
/*
> chemin_sans_boucles(areteA, areteB, nil, s);
{s=<areteA.areteB.nil,8>}
{s=<areteA.areteC.areteD.areteE.areteF.areteB.nil,22>}
{s=<areteA.areteC.areteE.areteF.areteB.nil,20>}
{s=<areteA.areteC.areteF.areteB.nil,15>}
> chemin_sans_boucles(areteA, areteE, nil, s);
{s=<areteA.areteB.areteF.areteC.areteD.areteE.nil,29>}
{s=<areteA.areteB.areteF.areteC.areteE.nil,27>}
{s=<areteA.areteB.areteF.areteE.nil,20>}
{s=<areteA.areteC.areteD.areteE.nil,10>}
{s=<areteA.areteC.areteE.nil,8>}
{s=<areteA.areteC.areteF.areteE.nil,19>}
>
> tous_les_chemins(areteA, areteB, s);
{s=<areteA.areteB.nil,8>.<areteA.areteC.areteD.areteE.areteF.areteB.nil,22>.<areteA.areteC.areteE.
areteF.areteB.nil,20>.<areteA.areteC.areteF.areteB.nil,15>.nil}
>
> plus_court_chemin(areteA, areteB, s);
{s=<areteA.areteB.nil,8>}
> plus_court_chemin(areteA, areteE, s);
{s=<areteA.areteC.areteE.nil,8>}
> plus_court_chemin(areteD, areteB, s);
{s=<areteD.areteC.areteA.areteB.nil,15>}
*/ |
Partager