This shows you the differences between two versions of the page.
sda-aa:laboratoare:08 [2021/04/18 22:31] cristian.rusu [4 Parcurgerea grafurilor] |
sda-aa:laboratoare:08 [2021/04/24 21:40] (current) cristian.rusu [5. Exerciții] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 7: ===== | + | ===== Laboratorul 7: Reprezentarea grafurilor ===== |
==== 1. Obiectivele laboratorului ==== | ==== 1. Obiectivele laboratorului ==== | ||
Line 10: | Line 10: | ||
=== 2.1 Definiție === | === 2.1 Definiție === | ||
- | Un graf neorientat este o pereche ordonată de multimi(X,U),unde: | + | Un graf neorientat este o pereche ordonată de multimi (X,U), unde: |
* X este o mulțime finită și nevidă de elemente numite noduri sau vârfuri | * X este o mulțime finită și nevidă de elemente numite noduri sau vârfuri | ||
Line 29: | Line 29: | ||
=== 2.3 Reprezentare === | === 2.3 Reprezentare === | ||
- | * Matricea de adiacență - este o matrice a cu n linii și n coloane,în care elementele a[i,j] se definesc astfel: | + | * Matricea de adiacență - este o matrice a cu n linii și n coloane, în care elementele a[i,j] se definesc astfel: |
- | * a[i,j] = 1 ,dacă ∃ muchia [i,j] cu i≠j | + | * a[i,j] = 1, dacă ∃ muchia [i,j] cu i≠j |
- | * a[i,j] = 0 ,în caz contrar | + | * a[i,j] = 0, în caz contrar |
* Lista de adiacență - este un tablou de liste egal cu numarul de varfuri;dacă există o muchie intre nodul curent si un alt nod,atunci acesta se trece în listă | * Lista de adiacență - este un tablou de liste egal cu numarul de varfuri;dacă există o muchie intre nodul curent si un alt nod,atunci acesta se trece în listă | ||
* Vectorul de muchii - mulțime ce conține toate muchiile grafului | * Vectorul de muchii - mulțime ce conține toate muchiile grafului | ||
Line 44: | Line 44: | ||
Un graf orientat este o pereche ordonată de mulțimi G={X,U}, unde: | Un graf orientat este o pereche ordonată de mulțimi G={X,U}, unde: | ||
- | * X este o mulțime finită și nevidă numită mulțimea nodurilor(vârfurilor) | + | * X este o mulțime finită și nevidă numită mulțimea nodurilor (vârfurilor) |
* U este o mulțime formată din perechi ordonate de elemente ale lui X, numită mulțimea arcelor | * U este o mulțime formată din perechi ordonate de elemente ale lui X, numită mulțimea arcelor | ||
Line 62: | Line 62: | ||
- | ==== 4 Parcurgerea grafurilor ==== | + | ==== 4. Parcurgerea grafurilor ==== |
=== 4.1 Parcurgerea în lățime === | === 4.1 Parcurgerea în lățime === | ||
Line 79: | Line 79: | ||
* negru - procesarea nodului s-a încheiat | * negru - procesarea nodului s-a încheiat | ||
- | Se păstrează informațiile despre distanța până la nodul sursă. Se obține arborele BFS. Pentru implementarea BFS se utilizează o coadă (Q) în care inițial se află doar nodul sursă.Se vizitează pe rând vecinii acestui nod și se pun și ei în coadă.În momentul în care nu mai există vecini nevizitați,nodul sursă este scos din coadă. | + | Se păstrează informațiile despre distanța până la nodul sursă. Se obține arborele BFS. Pentru implementarea BFS se utilizează o coadă (Q) în care inițial se află doar nodul sursă.Se vizitează pe rând vecinii acestui nod și se pun și ei în coadă. În momentul în care nu mai există vecini nevizitați, nodul sursă este scos din coadă. |
Line 160: | Line 160: | ||
{{:sda-aa:laboratoare:df1.jpg?600|}} | {{:sda-aa:laboratoare:df1.jpg?600|}} | ||
+ | ==== 5. Exerciții ==== | ||
+ | Folosiți datele din fișierul {{:sda-aa:laboratoare:trains.zip|}}. | ||
+ | |||
+ | - Citiți datele din arhiva atașată. | ||
+ | - Creați un graf neorientat și altul orientat din fișerele atașate. | ||
+ | - Câte noduri sunt în graf? Câte muchii (orientat si neorientat) sunt în graf? (rezultatele in fisierele noduri.txt si muchii.txt, doar numarul total) | ||
+ | - Găsiți stația (nodul) cea mai vizitată (și a doua cea mai vizitată) - gradul cel mai mare al nodului. (rezultatele in fisierele primul.txt si doilea.txt) | ||
+ | - Care este gradul stației din orașul vostru? (dacă orașul vostru este București atunci selectați orașul parinților/bunicilor/rudelor/etc.) (rezultatul in fisierul orasul_meu.txt) | ||
+ | - Parcurgeți graful pornind din București (BFS și DFS). (rezultatul in fisierul parcurgere_bfs.txt si parcurgere_dfs.txt) | ||
+ | |||
+ | |||
+ | <note important>Exercitiile 3-6 se fac cu graful neorientat.</note> | ||
+ | |||
+ | ==== 6. Probleme opționale, de interviu ==== | ||
+ | |||
+ | - Plecând dintr-un nod K, verificaţi dacă puteţi găsi un ciclu în graf. | ||
+ | - Verificaţi dacă există un lanţ care uneşte nodurile sursă (S) şi destinaţie (D). Dacă există, cum puteţi găsi lanţul cu număr minim de muchii? | ||
+ | - Verificaţi dacă există un lanţ hamiltonian în graf. | ||
+ | - Verificaţi dacă există un lanţ eulerian în graf. | ||
+ | - Verificaţi dacă o muchie dată (A, B) este un pod pentru drumul de la S la D. | ||
+ | |||
+ | **Notă:** Un lanţ hamiltonian este un lanţ elementar (nu se repetă nodurile) care trece prin fiecare nod. | ||
+ | |||
+ | **Notă:** Un lanţ eulerian este un lanţ simplu (nu se repetă muchiile) care trece prin fiecare muchie. | ||
+ | |||
+ | **Notă:** Spunem că muchia (A, B) este pod pentru drumul de la S la D dacă orice lanţ care duce de la S la D trece prin muchia (A, B). |