үшінші жолындағы қадамдардың толық саны (WG(n) орындаған қадамдарды
ескермегенде), бұл процедураның барлық қатынаулары n ретті болады, m-
қабырғалар саны. Бұл O(n+m) алгоритмінің жалпы күрделілігін береді.
Графтағы алгоритмдерді құруда тереңдікке іздеу үлкен роль
атқаратындықтан, WG процедурасының рекурсивтік емес нұсқасын көрсете
кетейік.
Рекурсиядан құтылудың стандартты әдісі – стекті қолдану болып
табылады. Әрбір қарастырылған шың стекке енгізіледі, ал қолданылғаннан
кейін стектен жойылады.
{WG процедурасының рекурсивтік емес нұсқасы;
Іздеу басында P[u] - әрбір u шыңы үшін ТІЗІМ[u] тізімінің 1-ші
жазбасына сілтеме болсын;
Р, ЖАҢА массивтері- глобалды}
1 PROCEDURE WGl(v);
{v шыңынан бастап графтағы тереңдікке іздеу}
2 BEGIN СТЕК := 0; СТЕК <= v; v қарастыру; ЖАҢА [v] := false;
3 WHILE CTEK ≠ 0 DO
4 BEGIN t := top(CTEK); {t-стектің жоғарғы элементі} {ТІЗІМ [t]
тізімінен бірінші жаңа шыңды табу}
5 IF P[t]= nil THEN b:=false
6 ELSE b := not ЖАҢА [Р[t]^.жол];
7
WHILE b DO BEGIN
8 P[t]:=Р[t]^.келес;
9 IF P[t]=nil THEN b := false
10 ELSE b :=not ЖАҢА ТP[t]^.жол]
11 END;
12 IF P[t]≠nil THEN {жаңа шың табылды}
13 BEGIN t := Р[t]^.жол; СТЕК <=t;
14
t қарастыру; ЖАҢА [t] := false
15
END
16 ELSE {t шыңы қолданылды}
17 t<=CTEK {стектің жоғарғы элементін жою}
18 END
19 END
Ескерту. Дөңгелек жақшада графтың шыңдарын тереңдікке іздеу
процесі кезіндегі қарастырылу реті бойынша номерлейміз.
Әдіс бағытталған графтарға да оңай қолданылады. Бұл жағдайда да
WG(v) және WGl(v) процедураларына қатынауының нәтижесі O(n+m) қадам
ішінде барлық шыңдарды, және v-ден u-ға апаратын жолы да бар шыңдарды
өтетіндігі болып табылады.
Сөйтіп, тереңдікке іздеу кезінде неғұрлым шыңға кештеу барса, ол
шың соғұрлым тезірек қолданылады. Бұл қарастырылған, бірақ
қолданылмаған шыңдар стекте жиналып қалатындығымен байланысты.
Графтағы кеңдікке іздеу
Графтан іздеудің басқа әдісі – кеңдікке іздеуді (breadth first search)
қарастырайық. Бұл әдіс стекті кезекке алмастыруға негізделген. Бұл
жағдайда шыңға неғұрлым ертерек баратын болсақ, ол соғұрлым ертерек
қолданылады (кезектен жойылады). Шыңды қолдану оның көршілес екі
қарастырылмаған шыңын қарастыру арқылы жүзеге асады.
1 PROCEDURE WS(v);
{ v шыңынан басталатын графтан кеңдікке іздеу;
ЖАҢА, ТІЗІМ айнымалылары - глобалды}
2
BEGIN
3 КЕЗЕК := 0; КЕЗЕК <= v; ЖАҢА [v] := false;
4 WHILE КЕЗЕК := 0
DO begin
5 Р<= КЕЗЕК; р-ға бару;
6 FOR u€ ТІЗІМ [р] DO
7 IF ЖАҢА [u] THEN BEGIN
8
КЕЗЕК <= u; ЖАҢА [u]:=false
9
END
10
END
11
END
Тереңдікке іздеуде сияқты WS(v) процедурасына қатынау v шыңы бар
граф байланыстылығы компонентасының барлық шыңдарына баруға әкеледі,
әрбір шың бір рет қана қарастырылады. Алгоритмнің есептелу күрделілігі
m+n ретіне ие, өйткені әрбір шың кезекке орнатылып, кезектен бір рет қана
жойылады, ал цикл итерацияларының 6 саны граф қабырғаларының ретін
білдіреді.