Documente Academic
Documente Profesional
Documente Cultură
https://www.pbinfo.ro/articole/810/grafuri-neorientate
Pe harta oricărei ţări distingem oraşele şi şoselele care le leagă. Dacă şoselele au câte două benzi
de circulaţie, adică pot fi strabătute în ambele sensuri acesta este un exemplu de graf neorientat.
Terminologie
Vom nota în continuare vârfurile cu valori între 1 și n – unde n este număru de vârfuri din graf, iar
muchiile cu [x,y] , unde x și y sunt vârfuri și se numesc extremitățile muchiei.
Conform definiției:
Exemplu: Fie G=(X,U), unde:
X={1,2,3,4,5,6,7,8,9,10,11}
U={[1,4],[1,5],[2,3],[2,8],[3,11],[4,5],[4,9],[7,10],[8,11]}
Observații:
Propoziţie. Un graf G=(X,U) cu n noduri şi m muchii are suma gradelor egala cu dublul
numărului de muchii.
n
∑ d ( x i )=2 m
i=1
Consecințe:
Matricea de adiacență
0 1 0 0 1
1 0 0 0 1
0 0 0 0 0
0 0 0 0 1
1 1 0 1 0
Observații:
Lista de muchii
Lista de muchii a unui graf neorientat reprezintă o mulțime ce conține toate muchiile din graf.
Pentru un graf neorientat cu G=(X,U) se va memora numărul de vârfuri n și apoi, pentru fiecare
vârf x, lista vârfurilor adiacente cu x, adică a vârfurilor y cu proprietatea că există muchia [x,y].
1: 2, 5
2: 1, 5
3: -
4: 5
5: 1, 2, 4
La reprezentarea în memorie trebui avut în vedere că dimensiunile listelor de vecini sunt variabile.
De aceea, este neeficientă utilizarea unor tablouri alocate static. Astfel, putem folosi:
Propozitie. Numarul de grafuri partiale ale unui graf neorientat cu n varfuri si m muchii
C 0m + C 1m + C 2m+ … + C mm = 2m
C 0n + C 1n + C 2n+ … + C n−1
n = 2n - 1
Exemplu:
Observații. Un graf neorientat oarecare poate avea mai multe grafuri parțiale și subgrafuri, dar un
unic graf complementar. Mai precis:
graful G admite 2m grafuri parțiale;
graful G admite 2n – 1 subgrafuri;
graful G admite un unic graf complementar.
Justificare:
Să ne amintim că o mulțime cu a elemente are 2a submulțimi, inclusiv mulțimea vidă și mulțimea
inițială. Atunci:
Propoziţie. Într-un graf complet cu n vârfuri sunt C 2n=n∗(n−1)/2 muchii și fiecare vârf are
gradul n-1.
Lanț, ciclu
Lanțul care conține numai muchii distincte este lanț simplu. Dacă muchiile unui lanț nu sunt
distincte se numește lanț compus.
Definiție: Se numește ciclu un lanț în care extremitatile coincid si toate muchiile sunt distincte
doua cate 2. Dacă toate vârfurile sunt distincte, mai puțin primul și ultimul, se numește ciclu
elementar.
Lungimea unui ciclu este egală cu numărul de muchii din ciclu. Lungimea minimă a unui ciclu
este 3.
Aplicatii
412)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("adiacenta.in");
ofstream g ("adiacenta.out");
int A[101][101], k,i,j,m,n;
int main()
{
f>>n>>m;
for (k=1;k<=m;k++)
{
f>>i>>j;
A[i][j]=A[j][i]=1;
}
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++) g<<A[i][j]<<' ';
g<<'\n';
}
g.close();
return 0;
413)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("adiacenta1.in");
ofstream g("adiacenta1.out");
int a[101][101],n;
void citire()
{ int x,y;
while(f>>x>>y)
{ a[x][y]=a[y][x]=1;
if(x>n) n=x;
if(y>n) n=y;
}
}
void afisare()
{ int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
g<<a[i][j]<<" ";
g<<endl;
}
}
int main()
{
citire();
afisare();
return 0;
}
417)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("gradmax.in");
ofstream g("gradmax.out");
int n,i,s,a[101][101],nr,mx;
void citire()
{int x,y;
f>>n;
while(f>>x>>y)
a[x][y]=a[y][x]=1;
}
int main()
{
citire();
/* for(i=1; i<=n;i++)
{ s=grad(i);
for(i=1; i<=n;i++)
if(grad(i)>mx) mx=grad(i);
for(i=1; i<=n;i++)
if(grad(i)==mx) nr++;
g<<nr<<" ";
for(i=1;i<=n;i++)
if(grad(i)==mx) g<<i<<" ";
return 0;
}
Tema:
412, 413, 414, 2707, 416, 430, 417, 474, 431 - Pbinfo
+ Var_Bac (II): V2-1, V5-1, V7-2, V9-2, V10-3, V12-1, V13-2, V14-1, V38-3