Sunteți pe pagina 1din 4

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

RAPORT
Lucrare de laborator nr.1
la Matematica Discreta
Tema: Păstrarea grafurilor în memoria calculatorului.

A elaborat:
st. gr. TI-211 Akbiyik Zafer

Chisinau 2022
#include<stdio.h> {if ((list[i][j]==0)&&(test!=0)) {printf("
#include<conio.h> ");}
#include<stdlib.h> }}
  printf("\n");}
// Eu am făcut o alocare de memorie. printf("---\n");
  }
int** aloc(int n, int m) int ** elib (int**a, int n)
{int **a; {int i;
int i; for (i=0;i<n;i++) {free(a[i]);}
a=(int**) malloc (n*sizeof(*a)); free(a); return(NULL);
if (a==NULL) {return a;} }
for (i=0;i<n;i++) { int ferifymem(int **a, char str[],int n)
a[i]=(int*) malloc (m*sizeof(int)); {int i;
if (a[i]==NULL) {return NULL;} } if (a) {printf("%s a fost definita deja...\
n",str);
return a; }
puts("Doriti redefinirea ei?(1-
void antet_mat_adiac(int n, char a)
da/0-nu)");
{int i,j;
scanf("%d",&i);
printf("%c",a);
if (i==1) {a=elib(a,n);return
for (i=0;i<n;i++) {printf("%2d:",i+1);} 1;}
printf("\n"); if (i==0) return 0;
} }
void afis_mat_adiac(int **mat, int n) return 1;
{int i,j; }
antet_mat_adiac(n,'a'); void zerografiere(int **a, int n, int m)
for (i=0;i<n; i++){ {int i,j;
  for (i=0;i<n; i++)
printf("%2d:",i+1); { for(j=0;j<m;j++)
for (j=0;j<n;j++){printf(" %d",mat[i][j]);} {
printf("\n"); a[i][j]=0;
} }
for (i=0;i<n;i++) {printf("----");} }
printf("\n"); }
} // Când introducem valoare (Pentru Adicenta)
//-------------matricea de int input_mat_adiac(int **a,int n)
adiacenta------------------------------
{int m=0;
void afis_mat_inc(int **mat, int n, int m)
int i, j,temp;
{int i, j;
for (i=0; i<n;i++) {
antet_mat_adiac(n,'a');
for (j=0;j<n;j++) {
for (i=0;i<m; i++){
printf("x%d->x%d:",i+1,j+1);
 
scanf("%d",&temp);
printf("%2d:",i+1);
while ((temp!=1)&&(temp!=0))
for (j=0;j<n;j++){printf(" %2d",mat[i][j]);} {puts("Introduceti o valoare corecta (0/1)");
printf("\n"); scanf("%d",&temp); }
} if (temp==1) m++;
  a[i][j]=temp; } }
for (i=0;i<n;i++) {printf("----");} return m;
printf("-----\n"); }
} // Pentru repeta linie
//---------------Matricea de int repeta_linie(int **d, int n,int k)
incidenta-------------
{int i,j,a,b,c,test=0;
void antet_list_adiac(int n)
for (i=0; i<n;i++){
{int i, pin=0, dupa=0;
if (d[k][i]==2) c=i;
pin=((3*(n+1))-3)/2;
if (d[k][i]==-1) a=i;
dupa=((n+1)*3)-3-pin;
if (d[k][i]==1) b=i;}
}
for (j=0;j<k;j++)
//Pentru lista aranjament
for(i=0;i<n;i++) {
void afis_list_adiac(int **list, int n)
if (d[j][i]==2&&i==c) return 1;
{int i,j,test=0;
if (d[j][i]==-1&&i==a) test++;
antet_list_adiac(n);
if (d[j][i]==1&&i==b) test++;}
for (i=0;i<n;i++){
if (test==2) return 1;
printf(" %2d:",i+1);
return 0;
test=0;
}
for (j=0;j<n+1;j++) {
// Când introducem valoare (Pentru Incidenta)
if (list[i][j]!=0) printf("%2d,",list[i][j]);
void input_mat_inc(int **a, int n, int m)
if ((list[i][j]==0)&&(test==0)) {test++;
printf(" 0 ");} else {int i,j,test;
for (i=0; i<m; i++) { for (j=0; j<m;j++) {
printf("Dati valorile pentru U%d:\n",i+1); lin=0;col=0; test=0;
  for (i=0; i<n; i++) {
test=repeta_linie(a,n,i); if (inc[j][i]==2) {adiac[i][i]=1;}
if (test==1) {puts("Arcul se repeta, mai if (inc[j][i]==-1) {lin=i;test=1;}
introduceti-l inca o data..."); i--;} if (inc[j][i]==1) {col=i; test=1;}}
} } if (test==1) adiac[lin][col]=1;
  }}
int control(int **a, int n, int curent,int int main()
temp)
{int **matinc=NULL, **matadiac=NULL,
{int i; **listadiac=NULL;
if (temp==0) return 1; int n=0, m=0;
if ((temp>=0)&&(temp<=n)){ int nr,temp;
for (i=0;i<n;i++) { goto definire;
if (temp==a[curent][i]) return 0;} }; Again:
return 1; } while (1) {
  printf("1. Pentru Convert"); printf("\r\n");
int input_lis_adiac(int **a, int n) printf(" 0. Iesire");printf("\r\
{int i,j=0,m=0, temp, test; n");
for (i=0; i<n;i++) {j=0; scanf("%d", &nr);
printf("x%d:",i+1); switch(nr) { //afisare
do { definire:
scanf("%d",&temp); case 2:
while ((temp<0)||(temp>n)) printf("1. Matricea de adiacenta");printf("\r\
{printf("Introduceti o valoare corecta (0..%d)\ n");
n",n); printf("2. Matricea de incidenta");printf("\r\
scanf("%d",&temp); } n");
test=control(a,n,i,temp); printf("3. Lista de adiacenta");printf("\r\
while(test!=1) {printf("Valoarea %d a mai fost n");
introdusa... introduceti alta valoare\n",temp); scanf("%d", &nr);
scanf("%d", &temp);test=control(a,n,i,temp);} switch(nr) {
a[i][j]=temp; if (temp!=0) m++; case 1:
j++;} while ((temp!=0)&&(j!=n)); temp=ferifymem(matadiac,"Matricea de
} adiacenta",n);
return m; puts("Dati numarul de virfuri");
} virfuri1:
  scanf("%d", &n); if(n<2) {puts("Dati numarul
de virfuri n>1"); goto virfuri1;}
void mat_adiac_list_adiac(int **mat, int
**list, int n) matadiac=aloc(n,n);
{int i,j,ind=0; zerografiere(matadiac,n,n);
for (i=0; i<n;i++) { m=input_mat_adiac(matadiac,n);
ind=0; puts("Matricea de adiacenta a fost
introdusa...");
for (j=0; j<n;j++) {
printf("S-au format %d arcuri\n",m);
if (mat[i][j]==1) {list[i][ind]=j+1;ind++;}
getch();
}}}
listadiac=aloc(n,n+1);
void list_adiac_mat_inc(int **list, int **mat,
int n) zerografiere(listadiac,n,n+1);
{int i,j, ind=0; mat_adiac_list_adiac(matadiac,listadiac,n);
for (i=0; i<n;i++){ matinc=aloc(m,n);
for (j=0; j<n; j++) { if (!matinc){puts("Matricea de incidenta nu va
disponibila, lucrul va fi
if (list[i][j]!=0) {
intrerupt...");getch();break;}
if (list[i]
zerografiere(matinc,m,n);
[j]==(i+1)) mat[ind][i]=2;
list_adiac_mat_inc(listadiac,matinc,n);
if (list[i][j]!
=(i+1)) { break;
case 2:
mat[ind][i]=-1; temp=ferifymem(matinc,"Matricea de
incidenta",m);
if (temp==0) {puts("Nu s-a dorit
mat[ind][(list[i][j])-1]=1; introducerea.."); getch();break;}
puts("Dati numarul de virfuri");
} virfuri2:
ind++; scanf("%d", &n); if(n<2) {puts("Dati numarul
}}}} de virfuri n>1"); goto virfuri2;}
// INC TO ADC arce:
void mat_inc_adiac(int **inc, int**adiac, int puts("Dati numarul de arce"); scanf("%d", &m);
n, int m)
{int i,j, lin=0, col=0,test=0;
if(n==2&&m>4) {puts("Ati introdus un numar if (!matinc){puts("Matricea de incidenta nu va
prea mare de arce, incercati din disponibila, lucrul nu va
nou...");getch();goto arce;} continua...");getch();break;}
if(m>n*2+n) {puts("Ati introdus un numar prea zerografiere(matinc,m,n);
mare de arce, incercati din nou..."); getch(); list_adiac_mat_inc(listadiac,matinc,n);
goto arce;}
matadiac=aloc(n,n);
matinc=aloc(m,n);
if (!matadiac){puts("Matricea de adiacenta nu
if (!matinc) {puts("Nu a fost alocata memorie va disponibila, lucrul nu va
pentru Matrice, lucrul va fi intrerupt..."); continua...");getch();break;}
getch(); zerografiere(matadiac,n,n);
break;} mat_inc_adiac(matinc,matadiac,n,m);
zerografiere(matinc,m,n); getch();break;
input_mat_inc(matinc,n,m); } break;
puts("Matricea de incidenta a fost introdusa case 0: if(listadiac!=NULL)
corect"); getch(); listadiac=elib(listadiac,n);
matadiac=aloc(n,n); if (matinc!=NULL) matinc=elib(matinc,m);
if (!matadiac){puts("Matricea de adiacenta nu if (matadiac!=NULL) matadiac=elib(matadiac,n);
va disponibila, lucrul nu va
return 1;
continua...");getch();break;}
case 1:
zerografiere(matadiac,n,n);
while (1) {
mat_inc_adiac(matinc,matadiac,n,m);
printf("1. Matricea de adiacenta");printf("\r\
 
n");
listadiac=aloc(n,n+1);
printf("2. Matricea de incidenta");printf("\r\
if (!listadiac) {puts("Lista de adiacenta nu va n");
fi disponibila, lucrul va fi
printf("3. Lista de adiacenta");printf("\r\
intrerupt...");getch(); break;}
n");
zerografiere(listadiac,n,n+1);
printf("4. Inapoi");printf("\r\n");
mat_adiac_list_adiac(matadiac,listadiac,n);
scanf("%d", &nr);
break;
switch(nr) {
case 3:
case 1:
temp=ferifymem(listadiac,"Lista de
puts("Matricea de adiacenta");
adiacenta",n);
afis_mat_adiac(matadiac,n);
if (temp==0) {puts("Nu s-a dorit
introducerea.."); getch();break;} getch();
puts("Dati numarul de virfuri"); break;
virfuri3: case 2:
scanf("%d",&n); if(n<2) {puts("Dati numarul de puts("Matricea de incidenta");
virfuri n>1"); goto virfuri3;} afis_mat_inc(matinc,n,m);
listadiac=aloc(n,n+1); getch();
if (!listadiac) {puts("Nu a fost alocata break;
memorie pentru Lista, lucrul va fi case 3:
intrerupt...");
puts("Lista de adiacenta");
getch(); break;}
afis_list_adiac(listadiac,n);
zerografiere(listadiac,n,n+1);
getch();
m=input_lis_adiac(listadiac,n);
break;
printf("Lista de adiacenta a fost introdusa,
sau obtinut %d arcuri",m); case 4:goto Again;}
matinc=aloc(m,n); }}}}

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