Documente Academic
Documente Profesional
Documente Cultură
Raport
pentru lucrarea de laborator Nr.1
Verificat:
Vladimir Melnic.
Departamentul Informatică şi IS,
Facultatea FCIM, UTM
Chișinău – 2022
1. Scopul lucrării de laborator
I. Studierea metodelor de definire a unui graf: matrice de incidență, matrice de adiacență, liste;
II. Elaborarea unor proceduri de introducere, extragere şi transformare a diferitor forme de
reprezentare internă a grafurilor cu scoaterea rezultatelor la display şi imprimantă.
III. Elaborarea programelor de determinare a matricei drumurilor într-un graf orientat.
2. Sarcina
I. Elaborați procedura introducerii unui graf în memoria calculatorului în formă de:
matrice de incidență (graf orientat, neorientat)
matrice de adiacență (graf neorientat).
II. Folosind procedurile menționate elaborați programul care va permite:
introducerea grafului reprezentat sub oricare din cele trei forme cu posibilități de
corecție a datelor;
extragerea informației la display.
III. Elaborați procedura de determinare a matricei drumurilor într-un graf orientat.
IV. Realizați un program cu următoarele funcții:
introducerea grafului ca matrice de adiacență (graf orientat) cu posibilităţi de analiză
sintactică şi semantică şi de corectare a informației;
determinarea matricei drumurilor;
extragerea informației la display;
Graf 12 x 19 Orientat / Neorientat
1 2 3 4 5 6 7 8 9 10 11 12
m1 0 0 0 0 0 0 0 0 0 -1 1 0
m2 0 0 1 0 0 0 0 0 0 -1 0 0
m3 0 0 0 -1 0 0 0 0 0 0 1 0
m4 0 0 0 0 0 0 1 0 0 0 0 -1
m5 0 0 0 0 0 0 0 0 0 0 1 -1
m6 0 0 0 0 0 0 1 0 0 0 -1 0
m7 0 0 0 0 0 0 -1 0 1 0 0 0
m8 0 0 0 0 0 0 0 -1 1 0 0 0
m9 0 1 0 0 0 0 -1 0 0 0 0 0
m10 1 0 0 0 0 0 0 0 -1 0 0 0
m11 0 -1 0 0 0 0 0 1 0 0 0 0
m12 -1 1 0 0 0 0 0 0 0 0 0 0
m13 -1 0 0 0 1 0 0 0 0 0 0 0
m14 0 0 0 0 1 -1 0 0 0 0 0 0
m15 0 0 1 0 0 -1 0 0 0 0 0 0
m16 0 0 -1 1 0 0 0 0 0 0 0 0
m17 0 1 0 0 0 -1 0 0 0 0 0 0
m18 0 0 0 -1 1 0 0 0 0 0 0 0
m19 0 0 0 -1 0 0 1 0 0 0 0 0
Matricea de incidență (graf neorientat)
n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12
m1 0 0 0 0 0 0 0 0 0 1 1 0
m2 0 0 1 0 0 0 0 0 0 1 0 0
m3 0 0 0 1 0 0 0 0 0 0 1 0
m4 0 0 0 0 0 0 1 0 0 0 0 1
m5 0 0 0 0 0 0 0 0 0 0 1 1
m6 0 0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 0 0 1 0 1 0 0 0
m7
0 0 0 0 0 0 0 1 1 0 0 0
m8
0 1 0 0 0 0 1 0 0 0 0 0
m9
1 0 0 0 0 0 0 0 1 0 0 0
m10
0 1 0 0 0 0 0 1 0 0 0 0
m11
1 1 0 0 0 0 0 0 0 0 0 0
m12
1 0 0 0 1 0 0 0 0 0 0 0
m13
0 0 0 0 1 1 0 0 0 0 0 0
m14
0 0 1 0 0 1 0 0 0 0 0 0
m15
0 0 1 1 0 0 0 0 0 0 0 0
m16
0 1 0 0 0 1 0 0 0 0 0 0
m17
0 0 0 1 1 0 0 0 0 0 0 0
m18
0 0 0 1 0 0 1 0 0 0 0 0
m19
Matricea de adiacenta .
#include <stdio.h>
void incidenta(int a[100][100],int n, int m){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%i",a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[100][100]=
{{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,0},
{0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0},
{0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,1},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1},
{0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,1 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,1 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0},
{0 ,1 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0},
{1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0},
{0 ,1 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0},
{1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{1 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,1 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0}
,
{0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0}}
;
int n=19;
int m=12;
printf("Matricea de incidenta neorientat:\n");
incidenta(a,n,m);
return 0;
}
#include <stdio.h>
void incidenta(int a[100][100],int n, int m){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%i",a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[100][100]= {{0,0,0,0,0,0,0,0,0,-1,1,0},
{0,0,1,0,0,0,0,0,0,-1,0,0},
{0,0,0,-1,0,0,0,0,0,0,1,0},
{0,0,0,0,0,0,1,0,0,0,0,-1},
{0,0,0,0,0,0,0,0,0,0,1,-1},
{0,0,0,0,0,0,1,0,0,0,-1,0},
{0,0,0,0,0,0,-1,0,1,0,0,0},
{0,0,0,0,0,0,0,-1,1,0,0,0},
{0,1,0,0,0,0,-1,0,0,0,0,0},
{1,0,0,0,0,0,0,0,-1,0,0,0},
{0,-1,0,0,0,0,0,1,0,0,0,0},
{-1,1,0,0,0,0,0,0,0,0,0,0},
{-1,0,0,0,1,0,0,0,0,0,0,0},
{0,0,0,0,1,-1,0,0,0,0,0,0},
{0,0,1,0,0,-1,0,0,0,0,0,0},
{0,0,-1,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,-1,0,0,0,0,0,0},
{0,0,0,-1,1,0,0,0,0,0,0,0},
{0,0,0,-1,0,0,1,0,0,0,0,0}};
int n=19;
int m=12;
printf("Matricea de incidenta orientat:\n");
incidenta(a,n,m);
return 0;
}
Graful, 12 vârfuri și 21 de arce
Matricea de adiacență
}
}
}
}
int main()
{
int a[100][100]={{0,0,0,0,1,1,0,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0,0,0},
{1,0,0,1,1,0,0,1,0,1,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,1,0,0},
{1,0,0,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0},
{0,0,0,1,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,1,1,0,0}};
int n=12;
printf("\nMatricea de adiacenta:\n\n");
adiacenta(a,n);
drumuri(a,n);
printf("\nMatricea drumului:\n\n");
adiacenta(a,n);
return 0;
}
Concluzie:
In urma efectuarii lucrarii date unde am studiat metodele de definire a unui graf: in matrice
adiacenta,matrice de incedinta si lista,am elaborat un procedeu de introducere, afisare si extragere a
unei din metodele mentionate mai sus prin programul C
Efecuand aceasta lucrare de laborator,am obtinut practica de lucru metodele de reprezentare ale
grafului
Pe parcursul lucrarii, am ajuns la concluzia ca cea mai simpla metoda de introducere a grafului de la
tastatura este lista adiacenta, care permite utilizatorului sa aleaga cu usurinta virfurile necesare