Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr. 1
la Matematici Speciale
Chişinău - 2021
Tema: Păstrarea grafurilor in memoria calculatorului.
Scopul lucrării :
Programarea algoritmilor de prelucrare a caracterelor și a șirurilor de caractere
prin utilizarea funcțiilor predefinite de prelucrare a caracterelor și a șirurilor de
caractere în limbajul C;
Elaborarea unor proceduri de introducere , extragere si transformare a diferitelor
forme de reprezentare internă a grafurilor cu scoaterea rezultatelor la display si
imprimantă.
Matrice de adiacență
1 2 3 4 5
x1 0 1 1 0 0
x2 0 0 1 1 0
x3 0 0 0 1 0
x4 0 0 0 0 1
x5 0 0 1 0 0
Matrice de incidență
1 2 3 4 5
U1 -1 1 0 0 0
U2 -1 0 1 0 0
U3 0 -1 1 0 0
U4 0 -1 0 1 0
U5 0 0 -1 1 0
U6 0 0 0 -1 1
U7 0 0 1 0 -1
Lista de incidență
1
1 2;3
2 3;4
3 4;
4 5;
5 3;
#include <iostream>
using namespace std;
int main()
{
modify:
int n, m;
int adiacenta[100][100] = {{0}};
int incidenta[100][100] = {{0}};
int lista[100][100] = {{0}};
int i = 0, j = 0, q = 0, x = 0, nr_de_u = 0;
string rsp;
cout << "Numarul de x-uri - ";
cin >> n;
cout << "\n";
do
{
do
{
cout << "In ce varf pleaca x" << i + 1 << "? -> x";
cin >> x;
incidenta[q][i] = -1;
incidenta[q][x - 1] = 1;
adiacenta[i][x - 1] = 1;
lista[i][j] = x;
if ((i + 1) == x)
{
incidenta[q][i] = 2;
}
cout << "x" << i + 1 << " mai are varfuri? (da/nu) ";
cin >> rsp;
j++;
q++;
if (x != 0)
{
nr_de_u++;
}
} while (rsp == "da");
cout << "\n";
i++;
j = 0;
} while (i < n);
2
cout << "\n";
cout << "Lista de adiacenta:\n\n";
for (int i = 0; i < n; i++)
{
cout << i + 1 << " | ";
for (int j = 0; j < n; j++)
{
if (lista[i][j] == 0)
{
cout << "0";
break;
}
cout << lista[i][j] << "; ";
}
cout << "\n\n";
}
cout << "\n";
cout << "Matricea de adiacenta:\n\n";
for (int i = 0; i <= n; i++)
{
cout << i << "\t";
}
cout << "\n";
for (int j = 0; j <= n; j++)
{
cout << "-------";
}
cout << "\n";
for (int i = 0; i < n; i++)
{
cout << i + 1;
for (int j = 0; j < n; j++)
{
cout << "\t" << adiacenta[i][j];
}
cout << "\n\n";
}
cout << "Matricea de incidenta:\n\n";
for (int j = 0; j <= n; j++)
{
cout << j << "\t";
}
cout << "\n";
for (int j = 0; j <= n; j++)
{
cout << "-------";
}
cout << "\n";
for (int i = 0; i < nr_de_u; i++)
{
cout << "U" << i + 1 << " | ";
3
for (int j = 0; j < n; j++)
{
cout << "\t" << incidenta[i][j];
}
cout << "\n\n";
}
cout << "Doriti sa modificati datele? - (da/nu) ";
cin >> rsp;
if (rsp == "da")
{
goto modify;
}
else
return 0;
}
4
1) Metode de reprezentare a grafului
Există 3 metode de bază de definire a unui graf:
1. Matricea de incidență
2. Matricea de adiacență
3. Lista de adiacență (incidență)
2) Matricea de incidență – este o matrice de tipul mxn, în care m este numărul de muchii
sau arce (pentru un graf orientat), iar n este numărul vârfurilor. La intersecția liniei i cu
coloana j se vor considera valori de 0 sau 1 în conformitate cu următoarea regulă:
1 – dacă muchia i este incidentă cu vârful j (dacă arcul i ”intră” în vârful j în cazul
unui graf orientat);
0 – dacă muchia (arcului) i și vârful j nu sunt incidente;
1 – numai pentru grafuri orientate, dacă arcul i ”iese” din vârful j.
3) În limbajul C++, putem realiza aceste metode în mai multe feluri. De exemplu putem citi
direct de la tastatură o matrice de adiacență, și cu ajutorul acestei matrici, putem afișa pe
ecran celelalte două metode datorită faptului că cunoaștem vârfurile adiacente. Totodată,
altă metodă ar fi citirea de la tastatură a numerelor vârfurilor adiacente cu numărul i, altfel
zis, citim de la tastatură o listă de adiacență, și astfel noi cunoaștem în ce vârf pleacă fiecare
x, și cunoscând această informație putem realiza mai ușor algoritmul de afișare pe ecran a
celorlalte două metode.
5
Analiza rezultatelor și concluzii
In urma efectuării lucrării de laborator am studiat si am aflat cum are loc păstrarea
grafurilor in memoria calculatorului.
Am studiat cum se realizează programarea algoritmilor de prelucrare a caracterelor și a
șirurilor de caractere prin utilizarea funcțiilor predefinite de prelucrare a caracterelor și a
șirurilor de caractere în limbajul C
Am studiat cum se elaboreaza procedurile de introducere, extragere si transformare a
diferitelor forme de reprezentare internă a grafurilor cu scoaterea rezultatelor la display si
imprimantă.