Documente Academic
Documente Profesional
Documente Cultură
Departamentul ISA
RAPORT
Lucrarea de laborator nr.1
La Matematici Speciale
A efectuat:
st. gr. AI-171 Crusnevschi Stanislav
A verificat:
dr., conf.univ. Tiholaz Tatiana
Chişinău 2018
1. SCOPUL LUCRĂRII:
Studierea metodelor de definire a unui graf: matrice de incidenţă, matrice de adiacenţă,
liste;
Elaborarea unor proceduri de introducere, extragere şi transformare a diferitor forme de
reprezentare internă a grafurilor cu scoaterea rezultatelor la display şi imprimantă.
2. TEORIE
Metode de reprezentare a grafului
Există trei metode de bază de definire a unui graf:
1. Matricea de incidenţă;
2. Matricea de adiacenţă;
3. Lista de adiacenţă (incidenţă).
Vom face cunoştinţă cu fiecare dintre aceste metode.
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 (arcul) i şi vârful j nu sunt incidente;
-1 - numai pentru grafuri orientate, dacă arcul i "iese" din vârful j.
Este uşor de observat că această metodă este de o eficacitate mică în sensul utilizării
memoriei calculatorului: fiecare linie conţine doar două elemente diferite de zero (o muchie
poate fi incidentă cu nu mai mult de două vârfuri).
Matricea de adiacenţă
Este o matrice pătrată nxn, aici n este numărul de vârfuri. Fiecare element poate fi 0, dacă
vârfurile respective nu sunt adiacente, sau 1, în caz contrar. Pentru un graf fără bucle putem
observa următoarele:
diagonala principală este formată numai din zerouri;
pentru grafuri neorientate matricea este simetrică faţă de diagonala principală.
Lista de adiacenţă şi lista de incidenţă
Lista de adiacenţă este o listă cu n linii (după numărul de vârfuri n), în linia cu numărul i vor
fi scrise numerele vârfurilor adiacente cu vârful i.
Lista de incidenţă se defineşte analogic cu deosebirea că în linia i vor fi scrise numerele
muchiilor (arcelor) incidente cu vârful i.
Se dă graful:
3 4
3
2 5
Matricea de adiacență
X1 X X3 X4 X5 1 3_0
2 2 1_4_0
X 0 0 1 0 0 3 2_4_0
1 Matricea de incidență
4 0
X 1 X10 0 X2 1 X3
0 X4 X5 5 2_4_0
d+ d-
2U 1 -1 0 1 0 0 X1 1 1
XU2 0 11 0 -11 0 0 0 0 X2 2 2
3U 3 0 -1 0 1 0 X3 Lista de adiacență 1 2
XU4 0 00 0 10 0 -1 0 0 X4 3 0
4U 5 0 0 -1 1 0 X5 0 2
XU6 0 10 0 11 0 0 0 -1
5U 7 0 0 0 1 -1
G={X,E}
E={(1,3),(2,1),(2,4),(3,2),(3,4),(5,2),(5,4)}
X={1,2,3,4,5}
Codul programului:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct list
{ unsigned inf;
struct list *next;
}G;
int M_i[100][100],m,n,i,j,k,c;
char M_a[100][100],c1;
G *L_a[100],*v,*p;
void main()
{
void Afis_L(void);
void Afis_M(char x);
}
getch();
}
void Afis_L(void)
{ for(i=0;i<n;i++)
{ v=L_a[i];
printf("%i-",i+1);
while(v!=NULL)
{printf("%i ",v->inf);
v=v->next;
}printf("0\r\n");
}
}
void Afis_M(char x)
{ if (x=='a') {for(i=0;i<n;i++,puts("\n"))
for(j=0;j<n;j++)
printf("%i ",M_a[i][j]);
}
if (x=='i') {for(i=0;i<m;i++,puts("\n"))
for(j=0;j<n;j++)
printf("%2i ",M_i[i][j]);
}