Documente Academic
Documente Profesional
Documente Cultură
Raport
Lucrarea de laborator Nr.1
la Matematica Discreta
Matricea de incidenta:
G=(X,U)
|X|=n
|U|=m
Bnxm
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("М");
printf("ННН№\n");
{int i,j;
printf("Й");
printf("ННН»\n");
printf("є %c є",a);
printf("\n");
{int i,j;
antet_mat_adiac(n,'A');
granita(n);
printf("єx%2dє",i+1);
printf("\n");
printf("И");
for (i=0;i<n;i++) {printf("НННК");}
printf("НННј\n");
//-------------matricea de adiacenta------------------------------
{int i, j;
antet_mat_adiac(n,'B');
granita(n);
printf("єU%2dє",i+1);
printf("\n");
printf("И");
printf("НННј\n");
//---------------Matricea de incidenta-------------
void antet_list_adiac(int n)
printf("ЙНННЛ");
printf("ННН»\n");
printf("є Xiє");
pin=((3*(n+1))-3)/2;
dupa=((n+1)*3)-3-pin;
printf("Fxi");
void granita_list(int n)
{int i;
printf("МНННО");
printf("№\n");
{int i,j,test=0;
antet_list_adiac(n);
for (i=0;i<n;i++){
granita_list(n);
printf("єx%2dє",i+1); test=0;
for (j=0;j<n+1;j++) {
if (list[i][j]!=0) printf("%2d,",list[i][j]);
printf("є\n");
printf("ИНННК");
printf("ј\n");
//--------------lista de adiacenta----------
//functions
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
{int i;
free(a); return(NULL);
{int i;
scanf("%d",&i);
if (i==0) return 0;
return 1;
{int i,j;
{ for(j=0;j<m;j++)
a[i][j]=0;
}
}
{int **a;
int i;
for (i=0;i<n;i++) {
return a; }
{int m=0;
int i, j,temp;
for (j=0;j<n;j++) {
printf("x%d->x%d:",i+1,j+1);
scanf("%d",&temp);
scanf("%d",&temp); }
if (temp==1) m++;
a[i][j]=temp; } }
return m;
{int result;
if (a[m][i]!=0) test=test+abs(a[m][i]);
if (a[m][i]==2) doi++;
if (a[m][i]==-1) minus++; }
if (test==0) return 0;
if (test==2) {
if (doi==1) return 1;
if ((doi==0)&&(minus==1)) return 1;
if (minus>1) return 5;
if ((doi==0)&&(minus==0)) return 7;
} else
if (test<2) {
if (minus==0) return 2;
else
if (test>2){
if(doi>1) return 4;
if(minus>1) return 5;
if ((doi==1)&&(minus>0)) return 6;
return 0;}
{int i,temp,test;
do {
printf("x%d: \n",i+1);
scanf("%d", &temp);
while ((temp!=0)&&(temp!=1)&&(temp!=-1)&&(temp!=2))
scanf("%d",&temp);
a[m][i]=temp;}
test=contr_linie_inc(a,m,n);
if (test==2) puts("Arcul nu este adiacent exterior cu nici un virf, incercati din nou...");
if (test==3) puts("Arcul nu este adiacent interior cu nici un virf, incercati din nou...");
if(test==5) puts("Arcul are prea multe virfuri adiacente exterioare, incercati din nou...");
if(test==7) puts("Arcul are prea multe virfuri adiacente interioare, incercati din nou...");
if(test==6) puts("Exista o bucla, sunt prea multe virfuri adiacente exterioare, incercati din
nou...");
if(test==8) puts("Exista o bucla, sunt prea multe virfuri adiacente interioare, incercati din
nou...");
} while(test!=1);
{int i,j,a,b,c,test=0;
if (d[k][i]==2) c=i;
if (d[k][i]==-1) a=i;
if (d[k][i]==1) b=i;}
for (j=0;j<k;j++)
for(i=0;i<n;i++) {
if (d[j][i]==2&&i==c) return 1;
if (d[j][i]==-1&&i==a) test++;
if (d[j][i]==1&&i==b) test++;}
if (test==2) return 1;
return 0;
{int i,j,test;
linie_mat_inc(a,i,n);
test=repeta_linie(a,n,i);
}}
{int i;
if (temp==0) return 1;
if ((temp>=0)&&(temp<=n)){
for (i=0;i<n;i++) {
return 1; }
printf("x%d:",i+1);
do {
scanf("%d",&temp);
scanf("%d",&temp); }
test=control(a,n,i,temp);
scanf("%d", &temp);test=control(a,n,i,temp);}
return m;
}
void mat_adiac_list_adiac(int **mat, int **list, int n)
{int i,j,ind=0;
ind=0;
if (mat[i][j]==1) {list[i][ind]=j+1;ind++;}
}}}
if (list[i][j]!=0) {
if (list[i][j]==(i+1)) mat[ind][i]=2;
if (list[i][j]!=(i+1)) {
mat[ind][i]=-1;
mat[ind][(list[i][j])-1]=1;
ind++;
}}}}
lin=0;col=0; test=0;
if (inc[j][i]==2) {adiac[i][i]=1;}
if (inc[j][i]==-1) {lin=i;test=1;}
if (test==1) adiac[lin][col]=1;
}}
#include"lab1/fundiscr.cpp"
#include"lab1/afisare.cpp"
int main()
int nr,temp;
goto definire;
Again:
while (1) {
textcolor(11);
clrscr();
cprintf(" *****Meniu****");cprintf("\r\n");
cprintf(" 0. Iesire");cprintf("\r\n");
scanf("%d", &nr);
switch(nr) { //afisare
definire:
case 1:textcolor(10);clrscr();
scanf("%d", &nr);
switch(nr) {
case 1:
temp=ferifymem(matadiac,"Matricea de adiacenta",n);
virfuri1:
matadiac=aloc(n,n);
getch(); break;}
zerografiere(matadiac,n,n);
m=input_mat_adiac(matadiac,n);
getch();
listadiac=aloc(n,n+1);
getch(); break;}
zerografiere(listadiac,n,n+1);
mat_adiac_list_adiac(matadiac,listadiac,n);
matinc=aloc(m,n);
zerografiere(matinc,m,n);
list_adiac_mat_inc(listadiac,matinc,n);
break;
case 2:
temp=ferifymem(matinc,"Matricea de incidenta",m);
clrscr();
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);
getch();
break;}
zerografiere(matinc,m,n);
input_mat_inc(matinc,n,m);
matadiac=aloc(n,n);
zerografiere(matadiac,n,n);
mat_inc_adiac(matinc,matadiac,n,m);
listadiac=aloc(n,n+1);
zerografiere(listadiac,n,n+1);
mat_adiac_list_adiac(matadiac,listadiac,n);
break;
case 3:
temp=ferifymem(listadiac,"Lista de adiacenta",n);
clrscr();
puts("Dati numarul de virfuri");
virfuri3:
listadiac=aloc(n,n+1);
getch(); break;}
zerografiere(listadiac,n,n+1);
m=input_lis_adiac(listadiac,n);
matinc=aloc(m,n);
zerografiere(matinc,m,n);
list_adiac_mat_inc(listadiac,matinc,n);
matadiac=aloc(n,n);
zerografiere(matadiac,n,n);
mat_inc_adiac(matinc,matadiac,n,m);
getch();break;
} break;
if (matinc!=NULL) matinc=elib(matinc,m);
if (matadiac!=NULL) matadiac=elib(matadiac,n);
return 1;
case 2:
while (1) {
cprintf(" 4. Inapoi");cprintf("\r\n");
scanf("%d", &nr);
switch(nr) {
case 1:
clrscr();
afis_mat_adiac(matadiac,n);
getch();
break;
case 2:
clrscr();
afis_mat_inc(matinc,n,m);
getch();
break;
case 3:
clrscr();
afis_list_adiac(listadiac,n);
getch();
break;
}//while(1)
} }}