You are on page 1of 8

Ministerul Educaţiei, Culturii și Cercetării al Republicii

Moldova Universitatea Tehnică a Moldovei

Departamentul Informatică și Ingineria Sistemelor

RAPORT

Lucrarea de laborator nr. 1

La Matematica Discreta

A efectuat:
CR-211 Cobzac Daniel

A verificat: Vladimir Melnic

Chişinău -2022
Lucrare de laborator Nr. 1
Tema: Păstrarea grafurilor în memoria calculatorului. Matricea drumurilor.
1. Scopul lucrării:
1. Studierea metodelor de definire a unui graf: matrice de incidenţă, matrice de adiacenţă,
liste;
2. Elaborarea unor proceduri de introducere, extragere şi transformare a diferitor forme de
reprezentare internă a grafurilor cu scoaterea rezultatelor la display şi imprimantă.
3. Elaborarea programelor de determinare a matricei drumurilor într-un graf orientat.

2. Sarcina
1. Cream Variabila de tip integer tab1 caruia ii adaugam elementele matricei de adiacenta, datele le
introducem manual, apoi cream 2 cicluri pentru a arata datele la ecran.

2.
#include <iostream>

#include<stdio.h>

#include<cstdlib>

#include<ctime>

#include<math.h>

using namespace std;

int main()

cout<<"Matrice de adiacenta: "<<endl;

int tab[14][14] = {

{0,1,0,0,0,0,1},

{0,1,0,0,0,0,1},

{1,0,1},

{0,0,1,0,1},

{0,0,0,1,0,1},
{0,0,1,0,1,0,1},

{1,0,1,0,0,0,0,1,1},

{0,0,0,0,0,0,1,0,1}, //8

{0,0,0,0,0,0,1,1,0,1},

{0,0,0,0,0,0,0,0,1,0,1,1,1},

{0,0,0,0,1,0,0,0,0,1,0,1},

{0,0,0,0,0,0,0,0,0,1,1,0,1},

{0,0,0,0,0,0,0,0,0,1,0,1,0,1},

{0,0,0,0,0,0,0,0,1,0,0,0,1}};

int i,j;

for(i=0;i<14;++i)

for(j=0;j<14; ++j)

cout<<tab[i][j]<<'\t';

cout<<endl;

cout<<"Matrice de incidenta:(neorientat) "<<endl;

int tab1[21][14] = {

{1,1},

{0,1,1},

{0,0,1,1},

{0,0,0,1,1},//4

{0,0,0,0,1,1},
{0,0,1,0,0,1},

{0,0,1,0,0,0,1},

{0,0,0,0,0,1,1}, //8

{1,0,0,0,0,0,1},

{0,0,0,0,0,0,1,1},

{0,0,0,0,0,0,1,0,1},

{0,0,0,0,0,0,0,1,1},

{0,0,0,0,0,0,0,0,1,1}, // 13

{0,0,0,0,0,0,0,0,0,1,1},

{0,0,0,0,1,0,0,0,0,0,1},

{0,0,0,0,0,0,0,0,0,0,1,1},

{0,0,0,0,0,0,0,0,0,1,0,1}, //17

{0,0,0,0,0,0,0,0,0,0,0,1,1},

{0,0,0,0,0,0,0,0,0,0,0,0,1,1},

{0,0,0,0,0,0,0,0,1,0,0,0,0,1}, // 20

{0,0,0,0,0,0,0,0,0,1,0,0,1,0}};

for(i=0;i<21;++i)

for(j=0;j<14; ++j)

cout<<tab1[i][j]<<'\t';

cout<<endl;

cout<<"Matrice de incidenta:(orientat) "<<endl;


int tab2[21][14] = {

{-1,1},

{0,-1,1},

{0,0,-1,1},

{0,0,0,-1,1},//4

{0,0,0,0,-1,1},

{0,0,1,0,0,-1},

{0,0,-1,0,0,0,1},

{0,0,0,0,0,-1,1}, //8

{-1,0,0,0,0,0,1},

{0,0,0,0,0,0,-1,1},

{0,0,0,0,0,0,-1,0,1},

{0,0,0,0,0,0,0,-1,1},

{0,0,0,0,0,0,0,0,-1,1}, // 13

{0,0,0,0,0,0,0,0,0,-1,1},

{0,0,0,0,-1,0,0,0,0,0,1},

{0,0,0,0,0,0,0,0,0,0,-1,1},

{0,0,0,0,0,0,0,0,0,-1,0,1}, //17

{0,0,0,0,0,0,0,0,0,0,0,-1,1},

{0,0,0,0,0,0,0,0,0,0,0,0,-1,1},

{0,0,0,0,0,0,0,0,-1,0,0,0,0,1}, // 20

{0,0,0,0,0,0,0,0,0,-1,0,0,1,0}};

for(i=0;i<21;++i)

for(j=0;j<14; ++j)

{
cout<<tab2[i][j]<<'\t';

cout<<endl;

cout<<"Matrice de adiacenta:(orientat) "<<endl;

int tab3[13][13] = {

{0,1,0,0,0,0,0,1},

{0,0,1,0,0,1,1},

{0,0,0,1,0,1},

{0,0,0,0,1,1},

{0,0,0,0,0,1},

{0,0,0,0,0,0,1},

{0,0,0,0,0,0,0,1,0,1},

{0,0,0,0,0,0,0,0,1}, //8

{0,0,0,0,0,0,0,0,0,1},

{0,0,0,0,0,0,0,0,0,0,1},

{0,0,0,0,0,1,0,0,0,0,0,1},

{0,0,0,0,0,0,0,0,0,0,1,0,1},

{0,0,0,0,0,0,0,0,0,0,1,0,0}};

for(i=0;i<13;++i)

for(j=0;j<13; ++j)

cout<<tab3[i][j]<<'\t';

}
cout<<endl;

cout<<"Matricea Drumurilor: "<<endl;

for(int k = 0 ; k < 13 ; ++k)

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

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

if( i != j && tab3[i][j] == 0 && tab3[i][k] == 1 && tab3[k][j] == 1)

tab3[i][j] = 1;

for(i=0;i<13;++i)

for(j=0;j<13; ++j)

cout<<tab3[i][j]<<'\t';

cout<<endl;

3. Intrebari de control

1. Graful se poate reprezenta printr o matrice adiacenta, incidenta, a drumurilor.


Grafurile pot fi orientate si neorientate
2.

Fie G=(V, M) un graf neorientat  cu n vârfuri (V={1,2, ..., n}) și m muchii.


          Matricea de adiacență, asociată grafului G, este o matrice pătratică de ordinul
n, cu elementele definite astfel: ai,j = 1, daca [i,j] aparține de M sau ai,j =0, daca [i,j]
nu aparține de M.
          În matricea de adiacentă, ai,j este 1, daca există muchie între nodul i si nodul j,
sau este 0, dacă nu există muchie intre nodul i si nodul j.Matricea de adiacență este
o matrice pătratică, de ordin n, și simetrică față de diagonala principală 
Matricea de adiacență are toate elementele de pe diagonala principală egale cu 0.
Numărul elementelor egale cu 1 de pe linia i (sau coloana i) este egal cu gradul
vârfului i.

Fie G=(V,U)G=(V,U) un graf orientat cu nn noduri. Algoritmul Roy-Warshall


construiește matricea drumurilor: DD cu nn linii și nn coloane, în care:
Conform definiției de mai sus, în matricea drumurilor, elementele cu indici egali vor
avea întotdeauna valoarea 00. Alternativ, putem accepta și elemente Di,i=1Di,i=1,
înțelegând prin asta că există un circuit care conține nodul ii.
Pentru a construi această matrice, se pornește de la matricea de adiacență și i se
aplică o serie de transformări, pornind de la următoarea idee: dacă nu există drum de
la ii la jj, dar există drum de la ii la kk și drum de la kk la jj, atunci va exista și drum de
la ii la jj, prin reuniunea celor două drumuri existente.

3.  Crearea matricei de adiacenţă prin introducerea extremităţilor muchiilor (arcelor)


de la tastatură. Memorarea şi afișarea gradelor (intern și extern pentru grafurile
orientate)  tuturor nodurilor, cu specificarea că este nod izolat sau nod terminal. 

Crearea matricei de incidenţă prin introducerea extremităţilor muchiilor de la


tastatură. Calcularea gradelor şi afişarea lor pentru toate nodurile (folosind
informațiile din matricea de incidență) şi specificarea dacă este nod izolat sau
terminal.

Crearea matricei drumurilor are loc prin metoda lui Roy-Warshall

4. Algoritmul lui Roy-Warshall stabilește despre oricare două noduri x y dacă există drum de
la x la y.
Se selecteaza coloana n si randul n, se cauta unitatea pe rand, iar daca la intersectia cu o alta unitate
de pe coloana respectiva e 0 se adauga 1.

You might also like