Sunteți pe pagina 1din 8

Tema grafuri neorientate

1) Grila:
Ex1 R: d) 26 noduri

Explicatie: Vom crea un graf complet cu 10 noduri, astfel graful are 90 de muchii. Restul de 10 muchii
vor fi adiacente cu al 11-lea nod. Cum 15 noduri sunt izolate, 15+11=26 noduri minime intr-un graf cu
50 de muchii.

Ex2 R: b) 3 componente conexe

5 2
1 3

8
6
7
4

Explicatie: Se observa din desen ca subgraful cu nodurile 1, 3, 7 este un component conex, respectiv
subgraful cu nodurile 2, 5, 6 si subgraful cu nodurile 4, 8. Astfel sunt 3 componente conexe

Ex3: R: b) 2 muchii

Explicatie: Graful este acelasi de la ex 2. Daca adaugam muchiile [3, 8] si [8, 5] de exemplu, atunci
graful este unul conex.

Ex4 R: b) 2 noduri izolate

Explicatie: Vom crea un subgraf complet cu 5 noduri. Astfel acest subgraf are 10 muchii. Pentru a
avea un graf cu 12 muchii, vom lega si nodul 6 cu inca 2 muchii de subgraful complet. Deci vor
ramane 2 noduri izolate.

Ex5 R: c) 2 muchii eliminate

Ex6 R: a) 4 muchii

Explicatie ex5 + ex6: Numarul minim de muchii pe care il poate avea un graf conex este nr de noduri
– 1. Deci un graf conex cu 5 noduri are minim 4 muchii. In graful de la ex5, nr de muchii sunt 6. Astfel
graful partial si conex cu nr minim de muchii are cu 2 muchii in minus. Graful de la ex 6 are 8 muchii.
Deci graful partial si conex cu nr minim de muchii are cu 4 muchii in minus.
Ex7 R: c) n=m+1

Explicatie: Teoria arborilor spune ca un graf neorientat este arbore daca graful este conex sau aciclic,
iar numarul de muchii este egal cu numarul de noduri-1.

Ex8 R: c) 3 muchii

Explicatie: Fiecare nod din graf are gradul 3. Asadar, pentru ca un graful partial sa aiba un nod izolat,
prin urmare si 2 componente conexe (in cazul acestui exercitiu), trebuie eliminate minim 3 muchii
(cele 3 care au ca si extremitate acelasi nod), rezultand un nod izolat ce va determina aparitia unui
component conex nou.

Ex9 R: d) 4 muchii

Explicatie: Un graf are nevoie de minim n-1 muchii, unde n este nr de noduri din graf, pentru a fi un
graf conex. Deci un graf care are 6 noduri are nevoie de 5 noduri pentru a fi conex. Asadar, din graful
dat, care contine 6 noduri si 9 muchii , vom putea elimina 4 muchii, obtinand un graf conex.

Ex10 R: c) este acicilic dacă şi numai dacă are 2 componente conexe

Explicatie: Un graf ce are n varfuri si n-2 muchii nu poate fi conex, deoarece este imposibil sa avem
cel putin o muchie care sa conecteze toate nodurile, intotdeauna fiind nevoie de macar o muchie.
Astfel, graful nu poate fi nici arbore pentru ca nu este conex. Nici varianta d nu este corecta deoarece
se poate crea un graf care contine un nod izolat (de exemplu un graf cu 3 noduri si o muchie; muchia
va fi [1, 2] si astfel nodul 3 ramane izolat). Deci, prin excludere, varianta corecta este c). Varianta c
este corecta deoarece nu pot crea un graf cu n noduri si n-2 muchii care sa nu contina 2 componente
conexe, astfel graful fiind si aciclic.
2) Probleme:
Ex1:

#include <fstream>

using namespace std;

ifstream in("graf.in");

ofstream out("graf.out");

int n, m, x, y, a[101][101];

char c;

int main()

in>>c>>n>>m;

for(int i=1;i<=m;i++){

in>>x>>y;

a[x][y]=a[y][x]=1;

if(c=='a')

for(int i=1;i<=n;++i){

for(int j=1;j<=n;++j)

out<<a[i][j]<<" ";

out<<'\n';

else if(c=='b'){

int p, d=0;

in>>p;

out<<"gradul lui "<<p<<" este: ";

for(int i=1;i<=n;++i)

d+=a[p][i];

out<<d;

}
else if(c=='c'){

int p;

in>>p;

out<<"nodurile adiacente lui "<<p<<" sunt: ";

for(int i=1;i<=n;++i)

if(a[p][i]==1) out<<i<<" ";

else if(c=='d'){

for(int i=1;i<=n;++i){

out<<"gradul lui "<<i<<" este: ";

int d=0;

for(int j=1;j<=n;++j)

d+=a[i][j];

out<<d<<'\n';

else if(c=='e'){

int dmax=0;

for(int i=1;i<=n;++i){

int d=0;

for(int j=1;j<=n;++j)

d+=a[i][j];

a[i][0]=d;

if(d>dmax) dmax=d;

out<<"nodul/nodurile cu nr maxim de vecini este/sunt: ";

for(int i=1;i<=n;++i)

if(a[i][0]==dmax) out<<i<<" ";

else if(c=='f'){

out<<"nodurile izolate sunt: ";


for(int i=1;i<=n;++i){

int d=0;

for(int j=1;j<=n;++j)

d+=a[i][j];

if(d==0) out<<i<<" ";

return 0;

Ex2

#include <fstream>

using namespace std;

ifstream in("graf.in");

ofstream out("graf.out");

int n, m;

int main()

in>>n>>m;

if( (n*(n-1))/2==m ) out<<"Este graf complet";

else out<<"Nu este graf complet";

return 0;

Ex3

#include <fstream>

using namespace std;

ifstream in("graf.in");

ofstream out("graf.out");

int n, a[101][101];
int main()

in>>n;

for(int i=1;i<=n;++i)

for(int j=1;j<=n;++j){

in>>a[i][j];

if(a[i][j]!=0 && a[i][j]!=1){

out<<"Nu poate fi graf";

return 0;

if(i==j && a[i][j]!=0){

out<<"Nu poate fi graf";

return 0;

for(int i=1;i<=n;++i)

for(int j=1;j<=n;++j)

if(a[i][j]!=a[j][i]){

out<<"Nu poate fi graf";

return 0;

out<<"Este graf";

return 0;

Ex4

a) X={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}


U={ [1, 2], [1, 4], [2, 3], [2, 5], [3, 4], [3, 5], [5, 6], [5, 7], [5, 8], [7, 9] }
b) Muchii incidente: 1) [1, 2] cu [2, 3]

2) [3, 5] cu [5, 7]
c)

1 2 3 4 5 6 7 8 9 10 11
1 0 1 0 1 0 0 0 0 0 0 0
2 1 0 1 0 1 0 0 0 0 0 0
3 0 1 0 1 1 0 0 0 0 0 0
4 1 0 1 0 0 0 0 0 0 0 0
5 0 1 1 0 0 1 1 1 0 0 0
6 0 0 0 0 1 0 0 0 0 0 0
7 0 0 0 0 1 0 0 0 1 0 0
8 0 0 0 0 1 0 0 0 0 0 0
9 0 0 0 0 0 0 1 0 0 0 0
10 0 0 0 0 0 0 0 0 0 0 0
11 0 0 0 0 0 0 0 0 0 0 0

d) 1: 2, 4

2: 1, 3, 5

3: 2, 4, 5

4: 1, 3

5: 2, 3, 6, 7, 8

6: 5

7: 5, 9

8: 5

9: 7

10: null

11: null

e) Muchiile incidente cu nodul 5 sunt: [2, 5], [3, 5], [5, 6], [5, 7], [5, 8].

f) Nodurile adiacente cu nodul 3 sunt: 2, 4, 5.

g) Lelementar = [ 2, 5, 7 ]

h) Celementar = [ 3, 4, 1, 2, 5, 3 ]

i) In graf sunt 3 componente conexe (componenta { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, componenta { 10 }


si componenta { 11 } ).

j) Nr minim de muchii ce trebuie adaugate pentru a obtine un graf conex este 2. Fiind 2
noduri izolate, este nevoie de cate o muchie adiacenta cu unul dintre cele 2 noduri si cu un
nod din componenta { 1, 2, 3, 4, 5, 6, 7, 8, 9 }. De exemplu putem adauga muchiile [9, 10] si
[9, 11].

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