TITLUL LUCRRII:
Grafuri
Profesor coordonator:
Saceanu Ion
Cuprins
Cuprins.................................................................................................................................2 2.4 Ordine i rade..........................................................................................................! 2." #ru$uri %ntr-un raf..................................................................................................! 2.! Cone&iune..................................................................................................................' (.) *epre+entarea prin $atrice de adiacenta ..................................................................' (.( ,ector de $uchii .......................................................................................................(.4 .atrice arce-noduri ...................................................................................................(." .atricea noduri-arce ................................................................................................./ 4.) .etoda parcur erii pe lati$e - Breadth 0irst 1B02 ................................................../ !.) 3raf partial...............................................................................................................)! '. Teoria rafurilor.............................................................................................................24
1. Introducere
Numim graf o pereche ordonat de mulimi, notat G=(X,U), unde X este o mulime finit i ne id de elemente numite noduri sau !rfuri, iar U este o mulime de perechi (ordonate sau neordonate) de elemente din X numite muchii (dac sunt perechi neordonate) sau arce (dac sunt perechi ordonate). "n primul ca#, graful se numete neorientat, altfel acesta este orientat. $adar un graf poate fi repre#entat su% forma unei figuri geometrice alctuite din puncte (care corespund !rfurilor) i din linii drepte sau cur%e care unesc aceste puncte (care corespund muchiilor sau arcelor).
&.& :anturi
(e numeste lant o succesiune de noduri , 1 ... , ; , cu proprietatea ca oricare doua noduri ecine (, i ,, i91 ) apartin de ). , 1 , , ; sunt e,tremitatile lantului :ungimea lantului este egala cu numarul de muchii care il compun, ;0 1. 2aca nodurile din lant sunt distincte, atunci lantul este elementar, in ca# contrar este neelementar. Exemplu'
1,2,3,1,4 - Lant neelementar (lungime 4) 1,2,3,4 - Lant elementar (lungime 3) 1,2,3,1,2, 1,2,3, - Lant neelementar (lungime )
- Nu e!te lant
&.3 Cicluri
(e numeste ciclu intr0un graf neorientat un lant ,1 , ,& ... , ; cu proprietea ca ,1 =,; si oricare & mchii (, i ,, i91 ) sunt distincte. 2aca un ciclu are toate nodurile distincte & cate & cu e,ceptia capetelor, atunci el se numeste ciclu elementar, in ca# contrar neelementar. Exemplu'
1,2,3,4,1 - "iclu elementar 2,3,4,1,2 - "iclu elementar 1,2,3,4,2,3,1 - Nu e!te ciclu 1,2,3,4,2, ,1 - "iclu neelementar
Graful id este graful i se notea# cu . (punem c un graf G este trivial dac acesta are ordinul 7 sau 1. (punem c un nod v este incident cu o muchie r dac . 2ou !rfuri x i y se numesc adiacente dac e,ist o muchie e care le unete (cu care am!ndou !rfurile sunt incidente). 2ou muchii sunt adiacente dac e,ist un nod x care s fie incident cu am%ele muchii. Numim gradul unui nod particular v , numrul de arce care sunt conectate la acel nod i se notea# de o%icei cu =(v) sau cu d(v). 2ac adunm gradele tuturor nodurilor din graful G, o% inem de dou ori numrul de muchii'
>aptul c mem%rul drept al ecuaiei a fi mereu par, implic aceeai proprietate ?n mem%rul st!ng, pentru ca egalitatea s fie satisfcut.
2#
Numim drum ?ntr0un graf o succesiune de muchii adiacente i distincte care conectea# dou !rfuri din graf (numite capetele drumului). Un drum se numete !implu dac muchiile care ?l compun sunt distincte. Numim ciclu un drum care are drept capete un acelai !rf. 2ac 8 = ,7, ..., ,;01 este un drum ?n graful G i ,;01,7 este o muchie ?n acest graf, atunci 8 9 ,;01,7 este un ciclu din graful G. Un ciclu se numete &amiltonian dac este simplu i trece prin toate nodurile grafului G, e,act o dat, i se numete eulerian dac trece prin toate muchiile grafului G, e,act o dat. Nu orice graf con ine un ciclu hamiltonian (>ig. &).
(punem c ( este un !u'graf al lui G, dac acesta conine o parte din !rfurile lui G i numai acele muchii care le conectea#.
2#( "onexiune
(punem c un graf este conex dac ?ntre oricare dou !rfuri ale acestuia e,ist cel puin un drum. 2e e,emplu grafurile din figurile 1 i & nu sunt cone,e, ?n timp ce graful din figura 3 este un graf cone,. Graful tri ial este considerat cone,. "omplementul unui graf G este graful , care conine o muchie ?ntre !rfurile x i y dac i numai dac G nu conine o astfel de muchie. Complementul unui graf care nu este cone,, este un graf cone,. @eciproca nu este ade rat, de e,emplu pentru un lan de lungime 3 (?ntre 4 !rfuri).
3.
/%ser atie' 8e diagonala principala toate elementele sunt 7 (nu a em %ucle). Datricea este simetrica fata de diagonala principala, deci' aAi,BC = aAB,iC.
Nod 1 & 3 4 5
2e e,emplu, pentru i = 1, informatia din lista figurata mai sus se a completa astfel' pA1C E & E 3 E 5.
4.
8arcurgerea grafurilor
8arcurgerea unui graf presupune i#itarea (prelucrarea) nodurilor grafului, o o sigura data fiecare,intr0o anumita ordine. Nodurile i#itate sunt legate intre ele direct sau indirect. In functie de ordinea relati a a nodurilor e,ista & metode de parcurgere' 1. Detoda parcurgerii pe latime 0 ,readt& -ir!t (,-) 2. Detoda parcurgerii in adancime 0 Dept& -ir!t (D-)
(e porneste de la un nod oarecare ,. (e i#itea#a toti ecinii directi ai nodului , daca nu au fost deBa i#itati. >iecare dintre nodurile i#itate la pasul anterior de ine nod curent si este prelucrat la fel ca nodul ,. x.1 1, &, 3, 4, H, I, J, K, 5
(e porneste de la un nod oarecare ,. (e alege primul ecin al lui , care nu a fost inca i#itat,de e, -,dupa care se trece la primul ecin ne i#itat al lui - si asa mai departe pana cand se parcurge in adancime ramura respecti a. Cand s0a aBuns la capatul ei, se re ine la nodul din care s0a plecat ultima data si se parcurge urmatorii sai ecini ne i#itati.
".
2rumuri ma,ime*minime
8ro%lemele de optim presupun ca fiecare muchie a grafului are asociat un anumit cost (de e,emplu, distanta intre doua orase, i si -). $ceste informatii se memorea#a in matricea costurilor' c(i,B) = costul asociat muchiei (i,B)F c(i,B) = 9J, daca nu e,ista muchia (i,B)F 0lgoritmi pentru determinarea co!tului minim1maxim2 8entru determinarea drumului de cost minim*ma,im intre & noduri ale unui graf se poate folosi' 1. $lgoritmul lui @o-0>lo-d
&. $lgoritmul lui 2iB;stra 3. $lgoritmul lui Lrus;al 4. $lgoritmul lui 8rim
fclose(f); (rintf(),n 3raful are *d varfuri, matricea costurilor este:,n),n); afisare(a,n); 3etch(); for(i%&;i<%n;i'') for($%&;$<%n;$'') if (i%%$) m i# $#%"; else if (a i# $#%%") m i# $#%&"""; else {m i# $#%a i# $#;} (rintf(),n matricea drumurilor directe este:,n)); afisare(m,n); 3etch(); for(-%&;-<%n;-'') for(i%&;i<%n;i'') for($%&;$<%n;$'') if (i5%- && $5%- && i5%$) m i# $#%min(m i# $#,m i# -#'m -# $#); (rintf(),n matricea distantelor minime este :,n)); afisare(m,n); 3etch();}
void drum(int i) {if (t i#5%") {drum(t i#); (rintf()*d ),i); } else (rintf()*d ),i); } void 9i$-stra() {(rintf()r%) );scanf()*d),&r); for(i%&;i<%n;i'') {vi7 i#%"; t i#%"; } vi7 r#%&; for(i%&;i<%n;i'') {d i#%a r# i#; if ((i5%r) && (d i#5%8"""")) t i#%r; } for(i%&;i<%n:&;i'') { min%8""""; for($%&;$<%n;$'') { if ((vi7 $#%%") &&(d $#d (o7#'a (o7# $#)) { d $#%d (o7#'a (o7# $#; t $#%(o7; } } for(i%&;i<%n;i'') if(i5%r) {(rintf()n drumul de cost minim de la *d la *d%*dn),r,i,d i#); drum(i); } } void main(void) { clrscr(); (rintf()dati n:) );scanf()*d),&n); for(i%&;i<%n;i'') for($%&;$<%n;$'') { (rintf()a *d# *d#%),i,$);scanf()*d),&a i# $#); a i# i#%"; } (rintf(),nschema 3rafului este:,n) ); for(i%&;i<%n;i'') { for($%&;$<%n;$'') (rintf()*+d),a i# $#); (rintf()n) ); } 9i$-stra(); 3etch(); }
creea# o pdure > (o mulime de ar%ori), unde fiecare !rf din graf este un ar%ore separat creea# o mulime ( care conine toate muchiile din graf at!t timp c!t ( este ne id o elimin o muchie de cost minim din ( o dac acea muchie conectea# doi ar%ori distinc i, atunci adaug muchia ?n pdure, com%in!nd cei doi ar%ori ?ntr0 unul singur o altfel, ignor muchia
:a sf!ritul algoritmului, pdurea are doar o component care repre#int un ar%ore parial de cost minim al grafului. $cest algoritm a fost scris de Moseph Lrus;al, ?n 1K5H.$li algoritmi pentru aceast pro%lem sunt $lgoritmul lui 8rim i $lgoritmul lui )orN ;a. *!eudocod2
function ;rus-al(<) for each v=rf v >n < do 9efinete un 3ru( elementar ?(v) @ {v}. ?reea7A o coadA cu (rioritAi B care conine muchiile din <, av=nd costul dre(t cheie. 9efinete un arbore C @ D EEC va conine >n final toate muchiile din FG?H EE n este numArul total de v=rfuri Ihile C are mai (uin de n:& muchii do EE muchia u,v este drumul minim de la u la v (u,v) @ B.eliminAHin() .ie ?(v) 3ru(ul care >l conine (e v i ?(u) 3ru(ul care >l conine (e u. if ?(v) J ?(u) then
Fdau3A muchia (v,u) la C. Knete ?(v) i ?(u) >ntr:un 3ru(, adicA reuniune >ntre ?(v) i ?(u). return arborele C
Intrare' Un graf cone, ponderat cu nodurile 1 i muchiile 6. Initiali#are' 1nou = +,., unde , este un nod ar%itrar (punct de plecare) din 1, 6nou= +. repet p!n c!nd 1nou=1' o $lege muchia (u, ) din 6 de cost minim astfel ?nc!t u este ?n 1nou i nu e (dac e,ist mai multe astfel de muchii, se alege ar%itrar) o (e adaug la 1nou, (u, ) la 6nou Ieire' 1nou i 6nou descriu ar%orele parial de cost minim
*!eudocod2
&. :(initiali7ations). L%{&} (M(&) root of the C tree). G%{6,...,n} .or everN $ belon3in3 to G :e($):%c e($&)# , (($)%& ( all (ea-s connected to the root.ON definition of the cost function:e($)%infinite Ihen M($) does not connect to M(&).). 6. ?hoose a - for Ihich e(-)<%e($) for everN $ belon3in3 to G./n case of ti3ht choose the smaller one. 14chan3e the L set Iith the set (roduced bN the union of the L set and {-}.
14chan3e the G set Iith the set (roduced bN the difference of the G set and {-}. (G<:G:{-}) /f G%" then sto(. 8. .or everN $ belon3in3 to G com(are e($) Iith c e(-$)#. /f e($) >c e(-$)# e4chan3e e($) <:c(e(-$)).<o bac- to Pte( &.
H# 3ipuri de grafuri
(#1 Graf partial
>ie G=($,)) si G 1 =($ 1 ,) 1 ). (punem ca G 1 este un graf partial al lui G daca $=$ 1 si ) 1 este inclus sau egal cu ). Un graf partial se o%tine dintr0un graf, indepartand o parte dintre muchiile sale si pastrand toate nodurile acestuia.
(u%graful unui graf >ie G=($,)) si G 1 =($ 1 ,) 1 )F $ 1 inclus sau egal cu $F ) 1 inclus sau egal cu ). ) 1 = +(,,-) * oricare ,,- apartine $ 1 daca (,,-) apartine de ) =Q (,,-) apartine de de ) 1 . (u%graful se o%tine din graful initial selectand o parte din nodurile sale si o parte din nodurile adiacente cu acesta.
H#
Graful 4amiltonian
:ant hamiltonian' lant elementar care contine toate nodurile grafului. Ciclu hamiltonian' ciclu elementar care contine toate nodurile grafului.
Conditii de suficienta' Georema lui 2irac' >ie G dat prin perechea ($,)). 2aca G are un numar de cel putin 3 incat gradul fiecarui nod respecta conditia d(,)=n*&, atunci graful este hamiltonian. Un graf hamiltonian nu poate a ea noduri i#olate.
Ciclu eulerian' ciclu care trece prin toate muchiile unui graf e,act o data. Graf eulerian' graf care contine cel putin un ciclu eulerian G33'G34'G35' Georema ' >ie un graf cone, fara noduri i#olate cu n= 3 noduri.Graful este eulerian dac daca p entru oricare nod al sau, ,, d(,) este par. 2eterminarea unui ciclu eulerian
(e porneste de la un nod oarecare si se construieste un ciclu. (e parcurg nodurile din ciclul determinat anteriorF daca e,ista un nod care mai are muchii neincluse in ciclul anterior se onstruieste un nou ciclu pro enind de le acest nod. Ciclul construit este inclus in ciclul initial in locul nodului gasit la pasul anterior.
pas ): c): )525(5) c2: 2545'52 pas 2: c): )52545'525(5) c2: '5"5)45' pas (: c): )52545'5"5)45'525(5) c2: '5-5))5' pas 4: c): )52545'5-5))5'5"5)45'525(5) c2: '5!5/5' pas ": c): )52545'5!5/5'5-5))5'5"5)45'525(5)
I. Georia grafurilor
"n matematic i informatic, teoria grafurilor studia# proprietile grafurilor. Un graf este o mulime de o%iecte (numite noduri) legate ?ntre ele printr0o mulime de muchii crora le pot fi atri%uite direc ii (?n acest ca#, se spune c graful este orientat). 1i#ual, un graf poate fi repre#entat ca o mulime de puncte legate ?ntre ele prin linii (de o%icei cur%e). Grafurile au o importan imens ?n informatic, de e,emplu'
?n unele pro%lemele de sortare i cutare 0 elementele mulimii pe care se face sortarea sau cutarea se pot repre#enta prin noduri ?ntr0un grafF schema logic a unui program se poate repre#enta printr0un graf orientat ?n care o instruciune sau un %loc de instruc iuni este repre#entat printr0un nod, iar muchiile direcionate repre#int calea de e,ecuieF ?n programarea orientat pe o%iecte, ierarhia o%iectelor (claselor) unui program poate fi repre#entat printr0un graf ?n care fiecare nod repre#int o clas, iar muchiile repre#int relaii ?ntre acestea (deri ri, agregri).
/riginile teoriei grafurilor se gasesc in re#ol area unor pro%leme de Bocuri si amu#amente matematice,care au atras atentia unor matematicieni de seama cum ar fi' 6uler, Tamilton, Ca-le-, (-l ester, )ir;off. 2ata nasterii teoriei grafului este considerata a fi anul 1I3H. Cand matematicianul :eonhard 6uler a pu%licat un articol in care a clarificat pro%lema celor I poduri si a pre#entat metode pentru re#ol area altor pro%leme de acelasi tip. Cu &77 ani mai tar#iu aparea la :eip#ic prima carte de teorie a grafurilor al carei autor este matematicianul maghiar 2enes Loreg. In amintirea contri%utiei lui 6uler unele notiuni si tipuri de grafuri de care acesta s0a ocupat sunt denumite de catre Loreg lant eulerian ,graf eulerian,etc. Un alt matematician care s0a ocupat de aceleasi pro%leme ca si 6uler, dar care si0a pu%licat re#ol arile cercetarilor sale in anul 1JI3 a fost Carl Tierhol#er. $lte i# oare ale teoriei grafurilor sunt'studiul retelelor electrice, pro%lema celor 4 culori, aplicatiile teoriei grafurilor in chimie(initiate de Ca-le-), pro%leme hamiltoniene, grafuri planare. >i#icianul Lirchoff a studiat la miBlocul secolului al XIX0lea retele electrice cu metode care apartin asta#i teoriei grafului contri%uind la de# oltarea acestei teorii. Germenul graf a fost folosit pentru prima data in sensul sau actual in 1JIJ de matematicianul (-l ester. Georia grafurilor are numeroase apeluri in chimie, contri%uind in mare masura la re#ol area pro%lemelor de numarare a grafurilor apartinand unor clase speciale. Georia grafurilor este folosita in domenii ariate' de la chimie la economie, de la studiul retelelor electrice la critica te,telor de politica, de enind o disciplina maBora.
14 &J 3H 3I 4H 45 JK IK I 17 H 17 1& 11
5ezol6are2
#include<fstream> usin3 names(ace std; ifstream fin()3.in)); ofstream fout()3.out)); const int ma44%&"""""; int a &""# &""#,-,n,m,( &""#; void citire() { int i,$,4; fin>>n>>m; for(i%&;i<%n;i'') for($%i'&;$<%n;$'') a i# $#%a $# i#%ma44; for(4%&;4<%m;4'') { fin>>i>>$; a i# $#%&; a $# i#%&; } } void rf() { int i,$,-; for(-%&;-<%n;-'') for(i%&;i<%n;i'') for($%&;$<%n;$'') if(i5%$) if(a i# $#>a i# -#'a -# $#) a i# $#%a i# -#'a -# $#; } void afis() { int i,$; for(i%&;i<%n;i'') { for($%&;$<%n;$'')
} }
2# (e da un graf neorientat cu n arfuri si m muchii, citit prin ectorul muchiilor. (a se afise#e pe linii separate componentele sale cone,e. (e a folosi un algoritm de tip depth first. 6,emplu'
>isierul de intrare' 1& 13 1& 13 14 &J 3H 3I 4H 45 JK IK I 17 H 17 1& 11 >isierul de iesire' 1 & J K I 3 H 4 5 17 11 1&
5ezol6are 2
#include<fstream> usin3 names(ace std; ifstream fin()3.in)); ofstream fout()3.out)); int a &""# &""#,-,n,m,( &""#; void citire() { int i,$,4; fin>>n>>m; for(4%&;4<%m;4'') { fin>>i>>$; a i# $#%&; a $# i#%&; }
} void df(int -) { int i; fout<<-<<) ); ( -#%&; for(i%&;i<%n;i'') if(a -# i#%%& && ( i#%%") df(i); } int main() { citire(); for(-%&;-<%n;-'') if(5( -#) { df(-); fout<<endl; } fin.close(); fout.close(); return "; }
3# (e da un graf neorientat cu n arfuri si m muchii, citit prin ectorul muchiilor si apoi un arf ;. (a se afise#e pe linii separate distantele minime de la arful ; la celelalte arfuri ale grafului si lanturile de lungime minima corespun#atoare acestor distante. 2istanta de la un arf la altul se considera a fi numarul de muchii din cel mai scurt lant care uneste cele doua noduri. (e a folosi un algoritm de tip %readth first. 6,emplu'
0isierul de intrare: )2 )( )2 )( )4 2(! (' 4! 4" -/ '/ ' )4 ! )4 )2 )) 0isierul de iesire: )2-2) 2)-2 ((-2)( 4(-2)4 "4-2)4" !4-2)(! '2-/' -4/)-/ )4 ( - / ' )4 )) )2 -
5ezol6are 2
#include<fstream> usin3 names(ace std; ifstream fin()3.in)); ofstream fout()3.out)); int a &""# &""#,-,n,m,( &""#,d &""#,4 &""#,C &""#; void citire() { int i,$,4; fin>>n>>m; for(4%&;4<%m;4'') { fin>>i>>$; a i# $#%&; a $# i#%&; } fin>>-; } void bf(int -) { int st,dr,$; st%dr%&; 4 &#%-; ( -#%&; d -#%"; Ihile(st<%dr) { for($%&;$<%n;$'') if(a 4 st## $#%%& && ( $#%%") { dr''; 4 dr#%$; ( $#%&; d $#%d 4 st##'&; C $#%4 st#; } st''; } } void lant(int -) { if(C -#5%") lant(C -#); fout<<-<<) ); } void afis() { int i; for(i%&;i<%n;i'') if(d i#5%&""""") { fout<<i<<) )<<d i#<<) lant(i); fout<<endl;
);
} else fout<<i<<) :,n); } int main() { citire(); for(int i%&;i<%n;i'') d i#%&"""""; bf(-); afis(); fin.close(); fout.close(); return "; }
K. )i%liografie
http://ro.wikipedia.org/wiki/Adobe_Dreamweaver http://ro.wikipedia.org/wiki/Adobe_Flash http://ro.wikipedia.org/wiki/Graf http://ro.wikipedia.org/wiki/Categorie:Teoria_grafurilor http://ro.wikipedia.org/wiki/Algoritmul_lui_Dijkstra http://www.graf.go.ro/inde !.html http://www."wu.edu/#andonie/Cartea$%&de$%&algoritmi/"ap'.htm
6e7is5 To$8 1244225 9:T.6 for the 7e;95 2442 Ed. OceanPress.