LUCRARE INDIVIDUALĂ
Nr. 2(b)
LA DISCIPLINA :
“Utilizarea tehnicilor de programare”
Grupa: W-1732
Elevul:
Strişca Veaceslav
Profesor:
Troian Veaceslav
Chişinău 2019
Cuprins :
Nr Continut Pagina
1. Cuprins 2
2. Grafuri (Teorie) 3
3. Sarcina 5
4. Programul 6
5. Concluzie 11
6. Bibliografie 11
2
Grafuri
Un graf neorientat este o pereche ordonată de mulţimi G = ( V , E ).
Multimea V este o multime nevida si finita de elemente denumite varfurile
grafului.
Multimea E este o multime de perechi formate cu ajutorul varfurilor din graf.
In cazul grafurilor neorientate, perechile de varfuri din multimea E sunt
neordonate si se numesc muchii. Ele nu au directie. Muchia formata de varfurile x
si y se noteaza cu [x,y], varfurile x si y fiind denumite extremitatile muchiei.
Daca exista o muchie determinata de varfurile x si y atunci, varfurile x si y se
numesc adiacente. De asemenea, varfurile x si y sunt considerate incidente cu
muchia pe care o formeaza. Fiecare extremitate a unei muchii este considerata
incidenta cu muchia respectiva.
Intre varfurile oricarui graf neorientat poate exista cel mult o muchie.
3
x 1 2 3 4 5 6
d(x) 3 2 1 1 3 0
Observam din tabelul de mai sus faptul ca varful 6 este un varf izolat si ca varfurile
3 si 4 sunt varfuri terminale.
Teorema: Suma gradelor unui varf neorientat este egala cu dublul numarului de
muchii din graf.
Σd(x) = 2n
3. Notiunile de lant si ciclu
Intr-un graf neorientat, se numeste lant o secventa de varfuri cu proprietatea ca
oricare doua varfuri consecutive din secventa sunt adiacente. De exemplu, pentru
graful dat, [3,1,2,5,1,3,1] este un lant cu lungimea 6.
Un lant este elementar atunci cand nu contine acelasi varf de mai multe ori. De
exemplu, pentru graful dat, [1,2,5] este un lant elementar cu lungimea 2.
Un lant este simplu daca nu contine de mai multe ori aceeasi muchie. De
exemplu, pentru graful dat, [3,1,2,5,4] este un lant simplu cu lungimea 4.
Se numeste ciclu, un lant simplu in care varful initial coincide cu varful final. In
alte cuvinte lantul pleaca din varful x si ajunge tot in varful x. De exemplu, pentru
graful dat, [1,2,5,1,2,5,1] este un ciclu.
Un ciclu este elementar daca nu contine de mai multe ori acelasi varf (cu exceptia
extremitatilor). De exemplu, pentru graful dat [5,1,2,5], este un ciclu elementar.
Teoreme:
- Un lant/ciclu elementar se numeste hamiltonian daca el trece prin toate
varfurile grafului.
- Un lant/ciclu elementar se numeste eulerian daca el trece prin fiecare
muchie al grafului o singura data.
4
Sarcina :
Exemplu:
date.in
89
12
14
23
34
35
56
78
46
date.out
012132##
101223##
210112##
121021##
321201##
232110##
######01
######10
(# semnaleaza faptul ca nu exista lant intre doua varfuri)
5
Programul :
#include <fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
void citire()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
fin>>x>>y;
A[x][y]=A[y][x]=1;
}
}
void BF(int s)
{
int C[100]={0};
int d[100]={0};
int st,dr,i;
C[1]=s;
d[s]=1;
st=dr=1;
while(st<=dr)
{
for(i=1;i<=n;i++)
if(A[C[st]][i] && d[i]==0)
{
dr++;
C[dr]=i;
d[i]=d[C[st]]+1;
}
st++;
}
for(i=1;i<=dr;i++) D[s][C[i]]=d[C[i]]-1;
}
int main()
{
citire();
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) D[i][j]=-1;
for(i=1;i<=n;i++) BF(i);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(D[i][j]!=-1) fout<<D[i][j]<<" ";
else fout<<"# ";
fout<<endl;
}
fin.close();
fout.close();
return 0;
}
6
Concluzie:
In lucrarea individuală respectiva am descris unele din metodele de cautare, Grafurile.
Parcurgerea, structura, definitii, etc. Ulterior am elaborat un program ce ruleaza pe baza de
grafuri. Pentru crearea programului am avut nevoie de cunostinte de baza in programare,
precum cunostinta limbajului C++. Nu a fost o problema dificila, totusi a necesitat putina
atentie sit imp.
Bibliografie:
https://invata.info/2017/03/31/teorie-grafuri-neorientate-c/#