Raport: Lucrarea de Laborator Nr.1
Raport: Lucrarea de Laborator Nr.1
Raport
Lucrarea de laborator Nr.1
la Matematica Discreta
Chişinău, 2010
Lucrare de laborator Nr.1
Un graf G este o pereche (X, T) unde X este o mulţime de elemente numite vârfuri sau
noduri, iar T este o aplicaţie a lui X pe mulţimea părţilor sale. Vom nota graful G = (X,
T). Deci dacă x ∈ X, atunci T(x) ⊂ X. Dacă x, y ∈ X şi y ∈ T(x), perechea u = (x, y) se
numeşte arc al grafului G, cu x extremitatea iniţială (originea) arcului u, iar y este
extremitatea finală a lui u.
Notând prin U = {(x, y) | x ∈ X, y ∈ T(x)} putem da o altă expresie a grafului şi anume
G = (X, U).
nod/vârf = element al mulţimii X; poate fi reprezentat în plan printr–un punct (cerc etc.),
eventual numerotat.
muchie = pereche neordonată de noduri; poate fi reprezentată în plan printr–un
segment de dreaptă sau un arc
adiacenţă = proprietatea a două noduri de a fi unite prin muchie; dacă [x,y]U,
spunem că nodurile x şi y sunt adiacente
incidenţă = proprietatea unei muchii de a uni două noduri; dacă [x,y]U, spunem că
muchia este incidentă cu nodurile x şi y
Matricea de incidenta:
G=(X,U)
|X|=n
|U|=m
Bnxm
1, Ui incident interior cu xj
0, Ui nu este incident cu xj
bij= -1,Ui incident exterior xj
2, Ui - bucla
Lista de adiacenta:
G=(X,F)
Xi Fxi
x1 xi,xj, xk,0
x2 ..........
.
.
.
xn ..........
Listing-ul programului
//afisare
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void granita(int n)
{int i;
printf("М");
for (i=0;i<n;i++) {printf("НННО");}
printf("ННН№\n");
}
void antet_list_adiac(int n)
{int i, pin=0, dupa=0;
printf("ЙНННЛ");
for (i=0;i<n;i++) {printf("ННН");}
printf("ННН»\n");
printf("є Xiє");
pin=((3*(n+1))-3)/2;
dupa=((n+1)*3)-3-pin;
for (i=0;i<pin;i++) printf(" ");
printf("Fxi");
for (i=0;i<dupa; i++) printf(" ");
printf("є\n");
}
void granita_list(int n)
{int i;
printf("МНННО");
for (i=0;i<n+1;i++) {printf("ННН");}
printf("№\n");
}
printf("ИНННК");
for (i=0;i<n+1;i++) {printf("ННН");}
printf("ј\n");
}
//--------------lista de adiacenta----------
//functions
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include"lab1/fundiscr.cpp"
#include"lab1/afisare.cpp"
int main()
{int **matinc=NULL, **matadiac=NULL, **listadiac=NULL;
int n=0, m=0;
int nr,temp;
goto definire;
Again:
while (1) {
textcolor(11);
clrscr();
cprintf(" *****Meniu****");cprintf("\r\n");
cprintf(" 1. Definirea grafului");cprintf("\r\n");
cprintf(" 2. Afisarea grafului"); cprintf("\r\n");
cprintf(" 0. Iesire");cprintf("\r\n");
scanf("%d", &nr);
switch(nr) { //afisare
definire:
case 1:textcolor(10);clrscr();
cprintf(" ***Alegeti modul de definire***");cprintf("\r\n");
cprintf(" 1. Matricea de adiacenta");cprintf("\r\n");
cprintf(" 2. Matricea de incidenta");cprintf("\r\n");
cprintf(" 3. Lista de adiacenta");cprintf("\r\n");
scanf("%d", &nr);
switch(nr) {
case 1:
temp=ferifymem(matadiac,"Matricea de adiacenta",n);
if (temp==0) {puts("Nu s-a dorit introducerea.."); getch();break;}
clrscr();
puts("Dati numarul de virfuri");
virfuri1:
scanf("%d", &n); if(n<2) {puts("Dati numarul de virfuri n>1"); goto virfuri1;}
matadiac=aloc(n,n);
if (!matadiac) {puts("Nu a fost alocata memorie pentru Matrice, lucrul va fi intrerupt...");
getch(); break;}
zerografiere(matadiac,n,n);
m=input_mat_adiac(matadiac,n);
puts("Matricea de adiacenta a fost introdusa...");
printf("S-au format %d arcuri\n",m);
getch();
listadiac=aloc(n,n+1);
if (!listadiac) {puts("Lista de adiacenta nu va fi disponibila, lucrul va fi intrerupt...");
getch(); break;}
zerografiere(listadiac,n,n+1);
mat_adiac_list_adiac(matadiac,listadiac,n);
matinc=aloc(m,n);
if (!matinc){puts("Matricea de incidenta nu va disponibila, lucrul va fi intrerupt...");getch();break;}
zerografiere(matinc,m,n);
list_adiac_mat_inc(listadiac,matinc,n);
break;
case 2:
temp=ferifymem(matinc,"Matricea de incidenta",m);
if (temp==0) {puts("Nu s-a dorit introducerea.."); getch();break;}
clrscr();
puts("Dati numarul de virfuri");
virfuri2:
scanf("%d", &n); if(n<2) {puts("Dati numarul de virfuri n>1"); goto virfuri2;}
arce:
puts("Dati numarul de arce"); scanf("%d", &m);
if(n==2&&m>4) {puts("Ati introdus un numar prea mare de arce, incercati din nou...");getch();goto arce;}
if(m>n*2+n) {puts("Ati introdus un numar prea mare de arce, incercati din nou..."); getch(); goto arce;}
matinc=aloc(m,n);
if (!matinc) {puts("Nu a fost alocata memorie pentru Matrice, lucrul va fi intrerupt...");
getch();
break;}
zerografiere(matinc,m,n);
input_mat_inc(matinc,n,m);
puts("Matricea de incidenta a fost introdusa corect"); getch();
matadiac=aloc(n,n);
if (!matadiac){puts("Matricea de adiacenta nu va disponibila, lucrul nu va continua...");getch();break;}
zerografiere(matadiac,n,n);
mat_inc_adiac(matinc,matadiac,n,m);
listadiac=aloc(n,n+1);
if (!listadiac) {puts("Lista de adiacenta nu va fi disponibila, lucrul va fi intrerupt...");getch(); break;}
zerografiere(listadiac,n,n+1);
mat_adiac_list_adiac(matadiac,listadiac,n);
break;
case 3:
temp=ferifymem(listadiac,"Lista de adiacenta",n);
if (temp==0) {puts("Nu s-a dorit introducerea.."); getch();break;}
clrscr();
puts("Dati numarul de virfuri");
virfuri3:
scanf("%d",&n); if(n<2) {puts("Dati numarul de virfuri n>1"); goto virfuri3;}
listadiac=aloc(n,n+1);
if (!listadiac) {puts("Nu a fost alocata memorie pentru Lista, lucrul va fi intrerupt...");
getch(); break;}
zerografiere(listadiac,n,n+1);
m=input_lis_adiac(listadiac,n);
printf("Lista de adiacenta a fost introdusa, sau obtinut %d arcuri",m);
matinc=aloc(m,n);
if (!matinc){puts("Matricea de incidenta nu va disponibila, lucrul nu va continua...");getch();break;}
zerografiere(matinc,m,n);
list_adiac_mat_inc(listadiac,matinc,n);
matadiac=aloc(n,n);
if (!matadiac){puts("Matricea de adiacenta nu va disponibila, lucrul nu va continua...");getch();break;}
zerografiere(matadiac,n,n);
mat_inc_adiac(matinc,matadiac,n,m);
getch();break;
} break;
case 2:
while (1) {
textcolor(13); clrscr();// afisare
cprintf(" ***Alegeti modul de afisare***");cprintf("\r\n");
cprintf(" 1. Matricea de adiacenta");cprintf("\r\n");
cprintf(" 2. Matricea de incidenta");cprintf("\r\n");
cprintf(" 3. Lista de adiacenta");cprintf("\r\n");
cprintf(" 4. Inapoi");cprintf("\r\n");
scanf("%d", &nr);
switch(nr) {
case 1:
if (!matadiac) {puts("Matricea nu a fost definita, definiti-o intii de toate..."); getch(); break;}
clrscr();
puts(" Matricea de adiacenta");
afis_mat_adiac(matadiac,n);
getch();
break;
case 2:
if (!matinc) {puts("Matricea nu a fost definita, definiti-o intii de toate..."); getch(); break;}
clrscr();
puts(" Matricea de incidenta");
afis_mat_inc(matinc,n,m);
getch();
break;
case 3:
if (!listadiac) {puts("Lista nu a fost definita, definiti-o intii de toate..."); getch(); break;}
clrscr();
puts(" Lista de adiacenta");
afis_list_adiac(listadiac,n);
getch();
break;