Sunteți pe pagina 1din 15

Grafurile si aplicabilitatea lor

in probleme practice

Informatica ne introduce in lumea


grafurilor in clasa a XI-a.Probabil, la
inceput, nu intelegem la ce ne sunt
folositoare, insa cu cat aflam mai multe
despre acestea, cu atat descoperim mai
multe moduri de a le utiliza.

Pentru cei care nu sunt inca initiati in acest


domeniu, vom prezenta notiunile de baza,
iar pentru ceilalti, vom face o scurta
recapitulare.

Grafurile
Numim graf o pereche ordonat
de mulimi, notat G=(X,U), unde:
X este o mulime finit i nevid de
elemente numite noduri sau vrfuri,
U este o mulime de perechi ordonate sau
neordonate de elemente din X.

Perechile se numesc muchii, daca sunt


perechi neordonate, sau arce, daca sunt
perechi ordonate.

Pai, e simplu.

In primul caz, graful este

neorientat, iar in cel de-al doilea este orientat.

Un graf poate fi reprezentat sub forma


unei figuri geometrice alctuite din puncte
care corespund vrfurilor i din linii drepte
sau curbe care unesc aceste puncte si
corespund muchiilor sau arcelor.

Graf neorientat

Graf orientat

Numim ordinul unui graf, numrul de noduri al grafului.


Numim gradul unui nod particular v, numrul de arce
care sunt conectate la acel nod.
Numim drum ntr-un graf o succesiune de muchii
adiacente i distincte care conecteaz dou vrfuri din
graf, numite capetele drumului. Un drum se
numete simplu dac muchiile care l compun sunt
distincte.
Numim ciclu un drum care are drept capete acelai vrf.
Un ciclu se numete hamiltonian dac este simplu i
trece prin toate nodurile grafului G, exact o dat.
Un ciclu se numete eulerian dac trece prin toate
muchiile grafului G, exact o dat.

Aplicarea in probleme
practice
Cred ca acum toata lumea a inteles ce
sunt grafurile. In continuare vom ilustra
cateva exemple de situatii concrete in care
grafurile ne sunt de ajutor in rezolvarea
unor probleme.

Un prim exemplu, si cel mai concludent,


este construirea unei retele de drumuri intrun oras.
Reteaua de strazi poate fi reprezentat
printr-un graf orientat n care interseciile
sunt nodurile, iar arcele sensul de circulaie
pe strzile care leag dou intersecii.
Nodurile sunt intersecii a cel puin 3 strzi.
Pentru a stabili prioritatea n intersecii i
pentru a fluidiza traficul interseciile vor fi
modernizate.

Pentru modernizare se vor folosi panouri


cu semne de circulaie, semafoare i se
vor amenaja sensuri giratorii.
Pentru fiecare strad pe care se poate
intra n intersecie se monteaz un panou
cu semnul de prioritate.
Pentru fiecare strad pe care nu se poate
intra n intersecie se monteaz un panou
cu semnul de interzicere a circulaiei.

n toate interseciile vor fi montate panouri cu


semne de circulaie conform strzilor incidente
cu intersecia. Fiecare din aceste mijloace de
modernizare are un cost: panoul cu semn de
circulaie costul c1, semaforul - costul c2,
sensul giratoriu - costul c3.
Pentru a stabili modul n care este modernizat
fiecare intersecie, acestea au fost clasificate n
intersecii mici de 3 strzi n care vor fi montate
panouri cu semne, intersecii mari cu 4 strzisemafoare i intersecii foarte mari cu peste 4
strzi n care se vor construi sensuri giratorii.

Algoritmul lui Dijkstra


Algoritmul lui Dijkstra este o metoda de
a stabili drumul de cost minim de la un nod
de start la oricare altul dintr-un graf.
Numele este dat de Edsger Dijkstra,
savantul care l-a descoperit.

Pasi
1. Se creeaz o list cu distane, o list cu nodul anterior, o list cu
nodurile vizitate i un nod curent.
2. Toate valorile din lista cu distane sunt iniializate cu o valoare
infinit, cu excepia nodului de start, care este setat cu 0.
3. Toate valorile din lista cu nodurile vizitate sunt setate cu fals.
4. Toate valorile din lista cu nodurile anterioare sunt iniializate cu -1.
5. Nodul de start este setat ca nodul curent.
6. Se marcheaz ca vizitat nodul curent.
7. Se actualizeaz distanele, pe baza nodurilor care pot fi vizitate
imediat din nodul curent.
8. Se actualizeaz nodul curent la nodul nevizitat care poate fi vizitat
prin calea cea mai scurt de la nodul de start.
9. Se repet (de la punctul 6) pn cnd toate nodurile sunt vizitate.

C++
void dijkstra(int x0)
{ int i, j, min, k, ok;
int viz[NMAX], d[NMAX],
tata[NMAX];
for (i = 1; i<=n; i++)
{d[i] = C[x0][i];
tata[i] = x0;
viz[i] = 0; }
tata[x0] = 0;
viz[x0] = 1; ok = 1;
while (ok)
{min = INFINIT;

for (i = 1; i<=n; i++)


if (!viz[i] && min>d[i])
{ min = d[i];
k = i; }
if (min != INFINIT)
{viz[k] = 1;
for (i = 1; i<=n; i++)
if (!viz[i] && d[i]>d[k]+C[k][i])
{d[i] = d[k]+C[k][i];
tata[i] = k; } }
else
ok = 0;}}

Dupa cum am vazut, grafurile ne sunt


foarte utile in viata de zi cu zi. Acestea au
fost doar cateva exemple de probleme in
care sunt folosite, ele avand o arie variata
de utilizare.
Asadar, la treaba! Ganditi-va voi si la
alte exemple!

S-ar putea să vă placă și