program teegraafis; const maxN=100; {Suurim võimalik tippude arv} var N: integer; {Tippude tegelik arv} g: array[1..maxN, 1..maxN] of integer; {Graaf ise. Rea ja veeru ristumiskohas olev 0 näitab, et serv vastavate nurkade vahel puudub, 1 aga, et serv on olemas. Andmed hoitakse sümmeetrilisena. St., et kui tipust a saab tippu b, siis saab ka vastupidi. } vaadatud: array[1..maxN] of integer; {Kui 0, siis vaatamata, kui 1, siis vaadatud} procedure tyhjenda; var rida: integer; veerg: integer; begin for rida:=1 to N do for veerg:=1 to N do g[rida, veerg]:=0; end; procedure serv(tipp1, tipp2: integer); {Serva loomine} begin g[tipp1, tipp2]:=1; g[tipp2, tipp1]:=1; end; procedure kirjuta; {trükitakse ekraanile iga tipu juurest leitud servad} var rida: integer; veerg: integer; begin for rida:=1 to N do begin write(rida:5, ':'); for veerg:=1 to N do if g[rida, veerg]=1 then write(veerg:3); writeln; end; end; procedure kirjutaMassiiv; {Ekraanile trükitakse massiivis leiduvad nullid/ühed} var rida, veerg: integer; begin for rida:=1 to N do begin for veerg:=1 to N do write(g[rida, veerg]:5); writeln; end; end; function kasServ(tipp1, tipp2: integer): boolean; {Teatatakse, kas etteantud tippude vahel leidub serv} begin if g[tipp1, tipp2]=1 then kasServ:=true else kasServ:=false; end; procedure looJuhuServ; var rida, veerg: integer; begin repeat rida:=random(N)+1; veerg:=random(N)+1; until not (kasServ(rida, veerg) or (rida=veerg)); serv(rida, veerg); end; procedure looJuhuGraaf(tippudeArv, servadeArv: integer); var i: integer; begin n:=tippudeArv; tyhjenda; for i:=1 to servadeArv do looJuhuServ; end; procedure paigutaServad; begin serv(1, 3); serv(3, 5); end; procedure alusta; begin randomize; N:=10; tyhjenda; {paigutaServad;} looJuhuGraaf(10, 30); end; function kasLeidubTee(tipp1, tipp2: integer): boolean; var i: integer; begin vaadatud[tipp1]:=1; if tipp1=tipp2 then begin kasLeidubTee:=true; exit; end; kasLeidubTee:=false; for i:=1 to n do if vaadatud[i]=0 then if kasServ(tipp1, i) then if kasLeidubTee(i, tipp2) then begin kasLeidubTee:=true; write(tipp1: 5); exit; end; end; procedure otsiGraafisTee(tipp1, tipp2: integer); var i:integer; begin for i:=1 to n do vaadatud[i]:=0; if kasLeidubTee(tipp1, tipp2) then begin writeln; writeln('tee ',tipp1,'-', tipp2, ' olemas') end else writeln('tee ',tipp1,'-', tipp2, ' puudub'); end; begin alusta; kirjutaMassiiv; writeln; otsiGraafisTee(1, 5); end.