Documente Academic
Documente Profesional
Documente Cultură
ATESTAT PROFESIONAL
Prof.ndrumtor:
Sceanu Ion
Elev:Vlsan Alina Corina
Profil:Matematica-Informatic
Colegiul Tehnic Mtsari
2015
1
DRUMURI N GRAFURI
ORIENTATE
Prof.ndrumtor:
Sceanu Ion
Elev:Vlsan Alina Corina
Profil:Matematica-Informatic
Colegiul Tehnic Mtsari
2015
2
CUPRINS
Grafuri orientate
Noiuni de baz
u5
u1
1
u3
u4
u7
u2
3
u6
Gradul exterior al unui vrf x, notat prin d+(x), este numrul arcelor de
form (x,y) cu yX. Gradul exterior al unui vrf x, notat prin d-(x),este
numrul arcelor de form (y,x) cu yX.
Un graf parial al unui graf orientat G=(X,U) se definete n acelai mod
ca i n cazul neorientat. El este un graf G1=(X,V) unde VU, deci este graful G
nsui sau se obine din G prin suprimarea anumitor arce.
i definiia unui subgraf al unui graf orientat G=(X,U) este asemntoare
cu cazul neorientat.Prin definiie , un subgraf al lui G este un graf H=(Y,V),
unde YX, iar arcele din V sunt toate arcele din U care au ambele extremiti n
mulimea de vrfuri Y.
Deci un subgraf H al unui graf orientat G este graful G nsui sau se
obine din G prin suprimarea anumitor vrfuri i a tuturor arcelor incidente cu
acestea .
Vom spune c subgraful H este indus sau generat de mulimea de vrfuri
Y.
Astfel,subgraful grafului G din figura ,indus de mulimea de vrfuri Y1
={1,2,4,5} are ca mulime de arce mulimea V 1 ={(1,2), (2,4), (4,5)},iar
subgraful indus de mulimea de vrfuri Y2 ={6,7,8} are mulimea arcelor
V2={(7,6),(6,8),(7,8),(8,7)}.
Un graf orientat este complet dac oricare dou vrfuri sunt adiacente.
n timp ce n cazul neorientat un graf complet cu n vrfuri este unic
determinat, n cazul orientat exista mai multe grafuri complete cu un numr dat
de vrfuri.Ele se deosebesc fie prin orientarea arcelor , fie prin faptul c ntre
dou vrfuri oarecare exista un arc sau dou arce de sensuri contrare.
Un lan al unui graf orientat se definete ca un ir de arce:
L=[u1,u2,..,up]
Cu proprietatea c oricare arc uI din acest ir are comun o extremitate cu ui-1 ,
iar cealalt extremitate este comun cu ui+1 pentru orice i=1,...,p-1.
Dac toate arcele lanului L au aceeai orientare ,care este dat de sensul
deplasrii de la x0 ctre xr lanul se numete drum.
Deci un drum ntr-un graf orientat G=(X,U) este un ir de vrfuri notat :
D=(x0,x1,...,xr)
cu proprietatea c (x0,x1), (x1,x2), .... , (xr-1,xr)U, deci sunt arce ale grafului.
Vrfurile x0 i xr se numesc extremitile drumului D. Dac vrfurile
x0 ,x1 , ... , xr sunt distincte dou cte dou, drumul D se numete elementar. Din
aceste definiii rezult c orice drum este i lan , dac l privim ca un ir de
arce.
Un drum D=(x0, ... ,xr) poate fi interpretat ca fiind traseul unei daplasari
pe arcele grafului n ordinea (x0,x1), (x1,x2), ... , (xr-1,xr).
daca i=j
+
daca (xi ,xj)U
Intuitiv,aceast alegere ar nsemna c drumul cel mai scurt de la xi la el
nsui este de lungime 0 iar inexistenta arcului ( xi, xj )este totuna cu existena
7
3
1
2
5
3
1
3
6
Se pornete de la vrful xi0 . Evident cel mai scurt drum de la xi0 la unul dintre
celelalte vrfuri ale grafului este dat de arcul (xi0 , xj) de lungime minim .
Urmtorul drum n ordinea lungimilor va fi dat fie de un alt arc cu extremitatea
iniial xi0 fie de un drum (xi0 ,xj ,xp). Alegem n continuare drumuri n ordinea
cresctoare a lungimilor , pn cnd am determinat drumuri minime de la xi0
ctre toate vrfurile pentru care exist drum pornind din xi0.
S[i]=
0 daca xiS
1 daca xiS
end
end.
CIJ =
dac i=j
lungimea drumului minim de la xi la xj dac exist
drum de la xi la xj
dac nu exist drum de la xi la xj
Determinarea mtricii C este asemntoare algoritmului Roy-Warshall
pentru obinerea mtricii drumurilor
Se pornete de la matricea costurilor C
for k=1 to n
for i=1 to n (ik)
for j=1 to n (jk)
cij : = min (cij , cik + ckj)
endfor
endfor
endfor
Observaie : Acest algoritm poate fi privit ca o succesiune de n
transformri aplicate mtricii C , o transformare k fiind astfel :
Tk(A) = B, B =(bij)nn , bij= min(aij ,aik+a) i,j { 1 , ... , n}.
Simultan cu determinarea lungimilor minime ale drumurilor , pot fi
reinute i acestea . Vom folosi o matrice D=(dij)nn ale crei elemente dij sunt
mulimi de noduri (dij va reprezenta n final mulimea nodurilor ce pot precede
pe xj n drumul minim de la xi la xj).
Odat cu iniializarea mtricii C cu matricea costurilor vom iniializa i
matricea D astfel :
12
program roymin;
const nmax=20;
inf=maxint div 2;
{inf poate fi initializat cu o valoare ce depaseste suma tuturor
costurilor}
type multime = set of 1.. nmax;
var c= array[1..nmax , 1..nmax] of word;
{c initial matricea drumurilor}
d: array [1..nmax , 1..nmax] of multime;
dr: array [1..nmax] of 1..nmax;
n,m,i,j.k.lg:word;
procedure initc;
{initializeaza matricea costurilor C}
var i,j,x,y,z: word;
begin
write(` Dati nr de noduri: `);
readln(n);
for i:=1 to n do
begin
13
for j:=1 to n do
c[i,j] := inf;
c[i,i] :=0;
end;
write(`Dati nr de noduri : `);
readln(m);
for i:=1 to m do
begin
write(`Extremitatile si lungimea arcului `,i,`: `);
readln(x,y,z);
c[x,y]:=z;
end;
end;
procedure initd;
{iniializeaza matricea D}
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do
if(c[i,j]<inf)and(i<>j) then d[i,j]=[i]
else d[i,j]=[];
end;
procedure drum(i,j:integer);
{genereaza in vectorul dr un drum minim de la i la j pornind din nodul j}
var k: word ;
begin
if i<>j then
begin
for k:=1 to n do
if k in d[i,j] then
begin
lg:=lg+1;
dr[lg]:=k;
drum(i,k);
lg:=lg 1
end;
end
else begin
writeln;
for k:=lg downto 1 do
write(dr[k]:4)
end;
end;
14
procedure afiare;
var i,j:word;
{afiarea rezultatelor}
Begin
for i:= 1 to n do
for j:=1 to n do
begin
writeln:
if c[i,j]=inf then
writeln( nu exista drumuri minime de la ,i, la ,j,)
else
begin
writeln( lungimea drumurilor minime de la ,i, la,j, este
,c[i,j]);
if i<> i then begin
lg:=1;
dr[1]:=j
drum(i,j)
end
end
end
end;
begin
initc;
initd;
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if c[i,j]>c[i,k]+c[k,j] then
begin
c[i,j]:=c[i,k]+c[k,j]:
d[i,j]:=d[k,j]
end
else
if c[i,j]=c[i,k]+c[k,j] then
d[i,j]:=d[i,j]+d[k,j];
afiare;
end.
15
-
0
for k=1 to n
for i=1 to n (ki)
for j=1 to n (kj)
if mij<mik+mkj
then mij := mik+mkj
dij := dkj
16
else
if mij := mik+ mkj
then dij:= dij dkj
endif
endif
endfor
endfor
endfor.
n matricea M vom avea n final lungimile drumurilor maxime ntre
oricare 2 noduri iar n dij i ,j{1 , ... , n} vom avea mulimea nodurilor ce pot
precede pe xj ntr-un drum maxim de la xi la xj.
Mai jos este dat programul Pascal de determinare a tuturor drumurilor
maxime ntre oricare dou noduri folosind algoritmul prezentat anterior , pentru
un graf G=(X, U) , X={1 , ... , n} .
program roymax;
const nmax=20;
inf=-(maxint div 2);
type multime = set of 1 .. nmax;
var c: array [1 .. nmax , 1 .. nmax] of integer;
{c initial matricea costurilor}
d: array [1 .. nmax , 1 .. nmax] of multime;
dr: array[1 .. nmax] of 1 .. nmax;
n,m,i,j,k,lg:word;
procedure initc;
{initializeaza matricea costurilor C}
var i,j,x,y,z:word;
begin
write(Dati nr de noduri:);
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
c[i,j]:= inf;
c[i,j]:=0
end;
write(Dati nr de ace :);
readln(m);
for i:=1 to m do
begin
write(Extremitatile si lungimea arcului,i, :);
17
readln(x,y,z);
c[x,y] :=z;
end
end;
procedure initd ; {initializeaza matricea D}
var i,j : integer ;
begin
for i:=1 to n do
for j:=1 to n do
if (c[i,j]> inf) and (i<>j) then d[i,j]:=[i]
else d[i,j]:=[];
end;
prodcedure drum(i,j:integer);
var k:word;
begin
if i<>j then
begin
for k:=1 to n do
if k in d[i,j] then
begin
lg:= lg+1;
dr[lg]:=k;
drum(i,k),
lg:=lg-1
end;
end
else begin
writeln;
for k:=lg downto 1 do
write(dr[k]:4)
end;
end;
procedure afisare;
var i,j:word;
begin
for i:=1 to n do
for j:=1 to n do
begin
writeln;
if c[i,j]=inf then
writeln( nu exista drum intre ,i, si ,j)
else
begin
18
Grafuri euleriene
Adeseori suntem tentai s credem simplul fapt de a traversa strzi sau poduri
nu implic nici o idee deosebit. Iat ns c exist o celebr problem de
traversare n care singura idee implicat este aceea de traversare, problema
celor apte poduri din Knigsberg. Aceast banal i totui foarte
controversat problem a dus la apariia i dezvoltarea teoriei grafurilor.
Problema se pune cam aa:
19
Figura 1.
Oraul Knigsberg era aezat pe coasta Mrii Baltice, la gurile rului Pregel. Pe
ru erau dou insule legate de rmuri i ntre ele de apte poduri ca n figura 1.
20
Explicaia programului:
Pornim dintr-un vrf neizolat reinut cu ajutorul variabilei prim, n cadrul
procedurii de citire, apoi cutm un ciclu eulerian al grafului printr-un algoritm
backtracking. Vom folosi pentru reinerea ordinii vrfului n ciclul eulerian un
ir s.
21
if (k=m)and(a[s[k],s[1]]=0)then valid:=false;
end;
procedure back(k:integer);
var i,j:integer;
begin
i:=1;
while (i<=n)and(not gasit) do
begin
s[k]:=i;
if valid(k) then
begin
a[s[k],s[k-1]]:=0;
a[s[k-1],s[k]]:=0;
if k=m then
begin
gasit:=true;
writeln('Ciclul eulerian este:');
for j:=1 to m do write(s[j],' ');
writeln(s[1]);
end
else back(k+1);
a[s[k],s[k-1]]:=1;
a[s[k-1],s[k]]:=1;
end;
i:=i+1;
end;
end;
procedure tip;
begin
clrscr;
writeln('Matricea de adiacenta:');
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j],' ');
writeln;
end;
writeln;
end;
begin{PP}
clrscr;
cit;
tip;
if prim<>0 then
23
begin
s[1]:=prim;
gasit:=false;
back(2);
if not gasit then write('Graful nu este eulerian.');
end
else write('Graful nu este eulerian.');
readkey;
end.
n viaa de zi cu zi rezolvm adesea, fr s ne dm seama probleme de grafuri
euleriene, de exemplu cnd vrem s mergem cu trenul n circuit i vrem s
pltim mai puin, calculm n aa fel nct s trecem peste tot i s pltim mai
puin. Dar aceasta nu o facem numai noi i potaii, ci grafurile se utilizeaz la
calcularea poziilor optime de amplasare a sateliilor de comunicaie pentru ca
informaia transmis s foloseasc mai puin timp.
Grafuri hamiltoniene
Se numeste ciclu hamiltonian intr-un graf, un ciclu elementar care contine toate
varfurile grafului.
Un graf care contine un ciclu hamiltonian se numeste graf hamiltonian.
Un lant elementar care contine toate varfurile grafului se numeste lant
hamiltonian.
*
*
Teorem:
Fie G=(X,U), cu n>=3 varfuri, daca oricare ar fi x un nod al grafului si
d(x)>=n/2, atunci graful este hamiltonian.
drum hamiltonian: un drum elementar care trece prin toate nodurile grafului;
circuit hamiltonian: un circuit care trece prin toate nodurile grafului;
24
25
BIBLIOGRAFIE
26
27
28