Sunteți pe pagina 1din 8

Ministerul Educaţiei al Republicii Moldova

Universitatea de Stat din Moldova

Facultatea de Matematică şi Informatică

DARE DE SEAMĂ

Lucrareaa de laborator nr.1 la obiectul „Teoria Grafurilor”

Varianta nr. 4

A elaborat: Secrieru Dumitru


Student al Grupei IA 1801

Chişinău, 2019
Cuprins

Sarcina Nr. 1: Citirea și manipularea grafurilor. ...................................................................................... 3


Sarcina Nr. 2: Aplicarea algoritmilor asupra grafurilor. .......................................................................... 5
Sarcina Nr. 3: Realizarea exercițiilor........................................................................................................ 8
Sarcină Ex 5.......................................................................................................................................... 8
Sarcină Ex 16.......................................................................................... Error! Bookmark not defined.

2
Sarcina Nr. 1: Citirea și manipularea grafurilor.
Sarcină:

Să se elaboreze un program care citește de la tatatură sau din fișier un Graf în formă de
Matrice de adiacență și returnează Forma Algebrică pentru grafului muchiilor acestuia.

Fundal Teoretic:

 Matrice de adiacență:

O matrice binară A = ||aij|| de dimensiunea n * n se numește matrice de adiacență a


grafului G cu mulțimea de vârfuri XG = { x1 , x2 ,..., xn }, daca:
1, 𝑑𝑎𝑐𝑎 𝑥𝑖 ≈ 𝑥𝑗
𝑎𝑖𝑗 = {
0, 𝑖𝑛 𝑐𝑎𝑧 𝑐𝑜𝑛𝑡𝑟𝑎𝑟
Matricea de adiacență a grafului este o matrice simetrică cu elementele de pe diagonala
principală egale cu zero. Liniile și coloanele acestei matrici corespund vârfurilor x 1 , x2 ,..., xn
ale grafului. Numărul de unități dintr-o linie (coloană) este egal cu gradul vârfului
corespunzator.
 Graful Muchiilor:

Fie G=(V, E) un graf neorientat. Se numește graf al muchiilor și se notează, L(G)=(VL,


EL) graful în care vârfurile corepund muchiilor în G și 2 vârfuri sunt adiacente în L(G) dacă
sunt adiacente muchiile corespunzătoare lor în G.

Cod sursă:

#include <iostream>

using namespace std;

int n, t[100][100];

int main()

{ cin>>n;

for (int i = 0; i<n; i++)

for (int j = 0; j<n; j++)

cin>>t[i][j];

cout<<"Noduri - "<<n<<endl;

3
for (int i = 0; i<n; i++){

for (int j = 0; j<n; j++) cout<<t[i][j]<<" ";

cout<<endl;

cout<<endl<<"Forma Algebrica al Grafului muchiilor:"<<endl;

for (int i = 0; i<n; i++) {

for (int j = 0; j<n; j++)

{ if (t[i][j] == 1)

for (int k = j+1; k<n; k++)

if (t[i][k] == 1) {

cout<<min(i+1,j+1)<<max(i+1,j+1)<<" - ";

cout<<min(i+1,k+1)<<max(i+1,k+1)<<endl;

}}}}

Rezultatul:

4
Sarcina Nr. 2: Aplicarea algoritmilor asupra grafurilor.
Sarcină:
Să se scrie un program care determină un lanț dintre două vârfuri vs și vd utilizând
metoda iterativă a parcurgerii garfului în adâncime.

Cod sursă:
#include <iostream>

using namespace std;

int n, m, t[100][100];

int alg[100][2],x,y,a,b,k;

int vizitat[100], stack[100];

int caut(int dest[100], int a)

{ int i = 0;

while (dest[i] != 0){

if (dest[i] == a) return 1;

i++;

} }

void adj(int ad[100], int alg[100][2], int m, int a)

{ k = 0;

for (int i = 0; i < m; i++)

if(alg[i][0] == a && !caut(vizitat, alg[i][1])){

cout<<"adiacent("<<a<<") - "<<alg[i][1]<<endl;

ad[x++] = alg[i][1]; k++;

} if (k == 0) vizitat[--y] = 0;}

void afisare(int dest[100])

{ int i = 0; cout<<endl<<"Afisare:"<<endl;

while (dest[i] != 0){

cout<<dest[i];

if (dest[i+1] !=0)cout<<" -> ";

i++;

} cout<<endl; }int main()

5
{ cin>>n;

for (int i = 0; i<n; i++)

for (int j = 0; j<n; j++)

{ cin>>t[i][j]; }

cout<<"Noduri-"<<n<<endl;

for (int i = 0; i<n; i++){

for (int j = 0; j<n; j++) cout<<t[i][j]<<" ";

cout<<endl; }

m = 0;

for (int i = 0; i<n; i++)

for (int j = 0; j<n; j++)

if (t[i][j] == 1) { alg[m][0] = i + 1; alg[m][1] = j + 1; m++;}

cout<<"Dati nodul start: "; cin>>a;

cout<<"Dati nodul finish: "; cin>>b;

for (int i = 0; i < 100; i++) stack[i] = 0;

for (int i = 0; i < 100; i++) vizitat[i] = 0;

x=y=0;

stack[x++]=a;

while (x > 0) { int temp_a = stack[x-1];

if(temp_a == b) {

vizitat[y++]=temp_a;

afisare(vizitat);

break;

} stack[--x] = 0;

if (!caut(vizitat, temp_a)) {

cout<<"vizitat-"<<temp_a<<endl;

vizitat[y++]=temp_a;

adj(stack, alg, m, temp_a); } }

6
Rezultatul

7
Sarcina Nr. 3: Realizarea exercițiilor.
Sarcina 8.

Care dintre urmtoarele afirmaii sunt adevrate icare sunt false:

a) orice arbore este un graf bipartit;

b) orice arbore este un graf bipartit complet;

c) un graf conex G = (X;U ) conine un singur ciclu daca i numai daca X = U ;

d) orice arbore cu n vârfuri contine n-1 istmuri.

a)Orice arbore T ( 𝑋𝑇 ; 𝑈𝑇 ) poate fi privit ca un graf bipartit G (𝑋1 𝑋2;U) , în care multimea
𝑋1este formata dintr-un vârf arbitrar x ∈ 𝑋𝑇 si toate vârfurile din T ce se afla la o distanta
para de la x , iar 𝑋2 = 𝑋𝑇 / 𝑋1 .

b)Adevarat, numai în cazul când arborele T contine|𝑋𝑡 | -1 vârfuri suspendate

c)Adevarat

d)Adevarat deoarece arborele nu contine cicluri si, prin urmare, orice muchie a sa este istm.

Sarcina 13.

Construii un graf G = (X;U ), |X|≥ 4 , pentru care graful muchiilor L(G) nu este eulerian, iar
graful 𝑳𝟐 (G) este eulerian.

Cel mai simplu graf cu proprietile date este graful G = (X;U ) în care X ={x1 , x2 , x3 , x4} U
={(x1 , x2 ),(x2 , x3 ),(x3 , x4 )}

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