Documente Academic
Documente Profesional
Documente Cultură
Lucrare de laborator
№1
Chișinău 2016
VARIANTA 11
1.Scopul lucrării
Studierea metodelor de definire a unui graf: matricea de incidență, matricea de adiacență,
liste, atît și extragerea și transformarea a diferitor forme de reprezentare a grafurilor cu afișarea
rezultatelor pe monitor.
2.Sarcina
Se dă graful G(F, X) X={x1, x2, x3, x4, x5, x6, x7, x8}
Se solicită:
a) a doua formă analitică
b) reprezentarea grafică(geometrică)
c) matricea de incidență
d) matricea de adiacență
e) lista de adiacență
f) gradele exterioare, inferioare și a gradele vîrfurilor
g) clasificarea vîrfurilor: inițiale, finale, intermediare, izolate
h) buclele
i) vîrfurile adiacente cu vîrful x5
j) arcele incidente cu x4
k) subgrafurile G1=(X1, U1) și G2=(X2, U2) unde X1={x1, x2, x3, x4},
X2={x5, x6, x7, x8}
3. Sarcina de bază
De reprezentat matricea de adiacență, incidență și lista de adiacență, cu ajutorul unui
program elaborat la calculator.
Sînt date vîrfurile
F(x1)={x4, x2, x3} F(x5)={x3, x6, x8}
F(x2)={x4, x5} F(x6)={x8}
F(x3)={x7} F(x7)={x6}
F(x4)={x3, x6} F(x8)=Ø
A 2-a formă analitică
G=(X,U)
X={x1, x2, x3, x4, x5, x6, x7, x8}
U={(x1, x4); (x1, x2); (x1, x3); (x2, x4); (x2, x5); (x3, x7); (x4, x3); (x4, x6); (x5, x3); (x5, x6);
(x5, x8); (x6, x8); (x7, x6) }
X1
X2
X3
X8
X4
X7
X5
X6
Matricea de incidență
B x1 x2 x3 x4 x5 x6 x7 x8
U1 -1 1 0 0 0 0 0 0
U2 -1 0 1 0 0 0 0 0
U3 -1 0 0 1 0 0 0 0
U4 0 -1 0 1 0 0 0 0
U5 0 -1 0 0 1 0 0 0
U6 0 0 -1 0 0 0 1 0
U7 0 0 1 -1 0 0 0 0
U8 0 0 0 -1 0 1 0 0
U9 0 0 1 0 -1 0 0 0
U10 0 0 0 0 -1 1 0 0
U11 0 0 0 0 0 -1 0 1
U12 0 0 0 0 0 1 -1 0
U13 0 0 0 0 -1 0 0 1
Matricea de adiacență
A x1 x2 x3 x4 x5 x6 x7 x8
x1 0 1 1 0 0 0 0 0
x2 0 0 0 1 1 0 0 0
x3 0 0 0 0 0 0 1 0
x4 0 0 1 0 0 1 0 0
x5 0 0 1 0 0 1 0 0
x6 0 0 0 0 0 0 0 1
x7 0 0 0 0 0 1 0 0
x8 0 0 0 0 0 0 0 0
Lista de adiacență
xj F(x)
x1 2, 3, 4, 0
x2 4, 5, 0
x3 7, 0
x4 3, 6, 0
x5 3, 6, 8, 0
x6 8, 0
x7 6, 0
x8 0
Gradele exterioare Gradele interioare
g+(x1)=3 g+(x5)=3 g-(x1)=0 g-(x5)=1
g+(x2)=2 g+(x6)=1 g-(x2)=1 g-(x6)=3
g+(x3)=1 g+(x7)=1 g-(x3)=3 g-(x7)=1
g+(x4)=2 g+(x8)=0 g-(x4)=2 g-(x8)=2
Gradele vîrfurilor
g+(xn)+g-(xn)=g(xn)
g(x1)=3 g(x5)=4
g(x2)=3 g(x6)=4
g(x3)=4 g(x7)=2
g(x4)=4 g(x8)=2
Clasificarea vîrfurilor
vîrfuri inițiale – x1
vîrfuri finale – x8
vîrfuri intermediare – x2, x3, x4, x5, x6, x7
vîrfuri izolate – nu există
Bucle
Bucle nu există
Subgrafurile:
G1=(X1,U1)
X1=(x1, x2, x3, x4)
X1
X2
X3
G2=(X2,U2)
X=(x5, x6, x7, x8)
X8
X7
X5
X6
Sarcina de bază:
Programul efectuat
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<string.h>
#include<Windows.h>
using namespace std;
int main()
{
int i,j,k,l,n,x;
int nr_inter;
int index[100];
int suma;
int masiv[100][100];
suma=0;
system("color 0E");
cout<<"Introduceti numarul de virfuri: ";
cin>>n;
for (i=1,k=0,l=0;i<=n;i++,k++,l++)
{
cout<<"Introduceti numarul de virfuri cu care interactioneaza virful
"<<i<<": ";
cin>>nr_inter;
if (nr_inter >n)
{
cout<<"\nEroare:Numarul introdus de dumneavoastra este incorect, mai
incercati odata\n\n";
i--;
k--;
l--;
}
else
{
suma+=nr_inter;
cout<<i<<"| ";
for (j=0;j<nr_inter;j++)
{
cin>>masiv[k][j];
cout<<' ';
}
index[l]=j;
}
}
cout<<"\n\tAfisare Lista de adiacenta introdusa de utilizator\n";
afisareLista(masiv,n,index);
do
{
showMeniu();
cin>>x;
switch(x)
{
case 0:
{
cout<<"\nIesire din program.....";
}break;
case 1:
{
cout<<"\n\t\tAfisare matrice de incidenta:\n\n";
afiseazaMatriceIncidenta(masiv,suma,index,n);
}break;
case 2:
{
cout<<"\n\t\tAfisare matrice adiacenta\n\n";
afiseazaMatriceAdiacenta(n,index,masiv);
}break;
case 3:
{
cout<<"\n\t\tAfisare lista de adiacenta\n\n";
afisareLista(masiv,n,index);
}break;
case 4:
{
system("cls");
}break;
default:
cout<<"\nNumarul\\simboul introdus nu este in meniu\n";
}
}while (x != 0);
_getch();
return 0;
}
void desenare_tablou(int n)
{
int i;
cout<<"\n\t";
for (i=1;i<=n;i++)
{
cout<<"X"<<i<<"\t";
}
cout<<endl<<endl;
}
for (i=0,k=0,x=0;i<n;i++,k++)
{
m=index[k];
for (j=0;j<m;j++)
{
uni[x]=masiv[i][j];
x++;
}
}
}
void showMeniu()
{
cout<<"\n\t\tMeniu\n";
cout<<"\t---------------------------\n";
cout<<"\tAlegeti comanda respectiva:\n\n";
cout<<"\t[1] Pentru afisarea matricei de incidenta.\n";
cout<<"\t[2] Pentru afisarea matricei de adiacenta.\n";
cout<<"\t[3] Pentru afisarea listei de adiacenta.\n";
cout<<"\t[4] Pentru curatarea ecranului.\n\n";
cout<<"\t[0] Iesire din programa.\n\n";
cout<<"\ncomanda>> ";
}
desenare_tablou(n);
for (i=0,a=0,b=0;i<suma;i++,b++,a++)
{
cout<<uni_index[a]<<','<<uni[b]<<"\t";
for (j=0;j<n;j++)
{
cout<<masiv_incidenta[i][j]<<"\t";
}
cout<<endl;
}
}
desenare_tablou(n);
for (i=0,k=0;i<n;i++,k++)
{
m=index[k];
for (j=0;j<m;j++)
{
x=masiv[i][j];
matrice_adiacenta[i][x-1]=1;
}
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if (matrice_adiacenta[i][j] != 1)
{
matrice_adiacenta[i][j]=0;
}
}
}
for (i=0;i<n;i++)
{
cout<<"X"<<i+1<<"\t";
for (j=0;j<n;j++)
{
cout<<matrice_adiacenta[i][j];
cout<<"\t";
}
cout<<endl;
}
}
Introducerea datelor:
Meniul principal
Fig. №1
Matricea de incidență
Fig. №2
Matricea de adiacență
Fig. №3
Lista de adiacență
Fig. №4
Concluzii:
Efectuind aceasta lucrare de laborator am obtinut competente si cunostinte noi in
studiu ale matematicii discrete sunt foarte interesante si necesare pentru ca ele cu