1. Ce sunt grafurile neorientate?
Un graf neorientat este o structură folosită în informatică
și matematică pentru reprezentarea conexiunilor dintre obiecte.
Un graf este format din:
- Noduri (vârfuri) → elementele grafului
- Muchii → legăturile dintre noduri
Într-un graf neorientat muchiile NU au direcție.
Dacă nodul A este conectat cu B,
atunci și B este conectat cu A.
Exemplu: muchia (1,2) permite deplasarea
atât din 1 în 2, cât și din 2 în 1.
2. Reprezentarea unui graf neorientat
Grafurile neorientate pot fi reprezentate în două moduri importante:
- Matrice de adiacență
- Listă de adiacență
Matrice de adiacență
Este o matrice pătratică unde:
- 1 → există muchie
- 0 → nu există muchie
0 1 1 0
1 0 0 1
1 0 0 1
0 1 1 0
Observăm că matricea este simetrică.
Acest lucru se întâmplă deoarece muchiile
sunt reciproce.
3. Proprietățile grafurilor neorientate
- Muchiile nu au direcție
- Conexiunile sunt reciproce
- Matricea de adiacență este simetrică
- Pot exista componente conexe
- Fiecare nod poate avea mai mulți vecini
Dacă există drum între orice două noduri,
atunci graful se numește graf conex.
4. Gradul unui nod
Gradul unui nod reprezintă numărul
de muchii care pleacă din acel nod.
Exemplu:
Dacă nodul 3 este conectat cu nodurile
1, 2 și 5, atunci gradul nodului 3 este 3.
5. Exemplu explicat
Presupunem următorul graf:
1 — 2
| |
3 — 4
Nodul 1 este vecin cu 2 și 3.
Nodul 4 este vecin cu 2 și 3.
Deoarece muchiile sunt neorientate,
relațiile funcționează în ambele direcții.
6. Exemplu în pseudocod
Program pentru afișarea vecinilor unui nod
folosind matricea de adiacență:
Citire n
Pentru i ← 1 până la n execută
Pentru j ← 1 până la n execută
Citește a[i][j]
Citește nod
Pentru i ← 1 până la n execută
Dacă a[nod][i] = 1 atunci
Afișează i
7. Exemplu în C++
Același algoritm implementat în C++:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[100][100];
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
int nod;
cin >> nod;
cout << "Vecinii nodului sunt: ";
for(int i = 1; i <= n; i++)
{
if(a[nod][i] == 1)
{
cout << i << " ";
}
}
return 0;
}
8. Avantajele grafurilor neorientate
- Se folosesc ușor pentru relații reciproce
- Ajută la modelarea rețelelor sociale
- Pot reprezenta drumuri între orașe
- Se folosesc în rețele de calculatoare
9. Concluzie
Grafurile neorientate sunt foarte importante
deoarece permit reprezentarea conexiunilor
dintre obiecte fără direcție.
Pentru a rezolva probleme cu grafuri,
trebuie să înțelegi noțiuni precum:
matricea de adiacență, gradul unui nod,
vecinii și conexitatea.