Nors šis algoritmas veikia gerai, tai taip sudėtinga, kad ji gali užtrukti ilgą laiką maršrutizatoriai apdoroti, o efektyvumas Tinklo nepavyksta. Be to, jei maršrutizatorius suteikia klaidingą informaciją kitų maršrutizatorių, visi maršruto sprendimai bus neveiksmingas. Norėdami geriau suprasti šį algoritmą, čia yra programa, parašyta C šaltinis:
#define MAX_NODES 1024 /* Maksimalus mazgų * /# apibrėžti INFINITY 1000000000 /* skaičius didesnis nei kas didžiausią kelio * /int N, dist [MAX_NODES] [MAX_NODES]; /* raj [I] [j] yra atstumas nuo i iki j * /negaliojančiu shortest_path (int s int t int kelias []) {konstrukto valstybė {/* kelias yra dirbo * /int pirmtakas; /* ankstesnę mazgas * /int ilgis /* ilgis nuo šaltinio iki šio mazgo * /ENUM {nuolatinis, preliminari} etiketė /* etiketė būklė * /} būklė [MAX_NODES]; int i, k, min konstrukto būklė * p; už (p = & būklė [0]; p < & būklė [n]; p ++) {/* inicijuoti būklė * /p-, > pirmtakas = -1p- > ilgis = INFINITYp- > etiketė = preliminariai; } būklė [t], .length = 0; valstybė [t] .label nuolatinis =; k = t; /* k yra pradinis darbo mazgas * /do {/* yra geriau kelias nuo k? * /I = 0; I < n; Aš ++) /* Šis grafikas yra n mazgai * /if (dist [K] [I] = 0 &! &Amp; būklė [I] .label == preliminariai) {if (valstybinės [K] .length + dist [K ] [I] < būklė [I] .length) {būklė [I] .predecessor = k; valstybė [I] .length = būklė [K] .length + raj [K] [I]}} /* Rasti preliminariai pažymėtą mazgas su mažiausio etiketėje. * /K = 0, min = INFINITY, nes (i = 0; I < N; Aš ++) if (valstybinės [I] .label == Preliminari & & būklė [I] .length < min) = būklė [I] .length; K = Aš; } būklė [K] .label nuolatinis =} while (k = S!); /* Nukopijuokite kelią į išėjimo masyvo * /I = 0; K = 0Do {kelias [Aš ++] = k; k = būklė [K]. pirmtakas;} while (K > = 0);} DV algoritmai
DV algoritmai taip pat žinomas kaip Bellman-Ford maršrutizavimo algoritmų ir Ford Fulkerson maršrutizavimo algoritmai. Be šių algoritmų, kiekvienas maršrutizatorius turi maršruto lentelę, kuri rodo, kad geriausias maršrutas bet kurią paskirties vietą. Tipiškas grafikas ir maršruto lentelė maršrutizatorius J rodomas puslapio viršuje.
Kaip matyti iš lentelės, jei maršrutizatorius J nori gauti paketus maršrutizatorius D, ji turėtų siųsti juos į maršrutizatoriaus H. Kai paketai atvykti į maršrutizatoriaus H, jis pasitikrina savo stalą ir nusprendžia, kaip si