Definicija: Graf G
je uređeni skup (V, E)
, gde je V
konačan neprazan skup čvorova, a E
skup ivica (grana). Svaka ivica predstavlja par čvorova (x, y)
iz V
.
Definicija: Put od čvora X
do nekog drugog čvora Y
je niz ivica koji spaja ova dva čvora, u kome se svaka ivica iz grafa pojavljuje najviše jedanput.
Definicija: Za graf kažemo da je povezan ako i samo ako za svaka dva njegova čvora postoji put koji ih spaja.
Teorema: Ako graf nije povezan onda se on može razbiti na povezane komponente, disjunktne po čvorovima.
U programskim jezicima koji se koriste na takmičenjima iz informatike graf ne postoji kao standardni tip podataka, pa ga zato na neki način treba predstaviti i čuvati u memoriji računara.
Ovde su data dva načina čuvanja grafa u memoriji računara:
Matrica povezanosti: U matrici veličine nxn
(gde je n
broj čvorova grafa) polje i
, j
ima vrednost 1
ako postoji ivica koja povezuje čvorove i
i j
, ili 0
u slučaju da takva ivica ne postoji.
#define MAXN 100 int veze[MAXN][MAXN];
Napomena: umesto matrice tipa int može se koristiti matrica tipa bool.
Lista suseda: U nizu velične n
(gde je n
broj cvorova) i
-ti element sadrži povezanu listu u kojoj se nalaze svi čvorovi izmedju kojih i čvora i
postoji ivica.
#define MAXN 100 // Lista indeksa čvorova struct PList { int v; // indeks čvora sa kojim je neki čvor povezan PList* sled; }; PList* veze[MAXN]; // Niz veza čiji su elementi liste indeksa čvorova
Napomena: Može se korisit i neka STD struktura za čuvanje liste suseda (npr. std::vector
, std::list
, ... ).
Matrica povezanosti ne mora da bude simetrična, tj. ako postoji grana (a, b)
onda ne mora da postoji grana (b, a)
.
Matrica povezanosti je simetrična, tj. ako postoji grana (a, b)
onda postoji i grana (b, a)
.
Definicija: Drvo je neusmereni povezani graf bez ciklusa.
Teorema: Ako važe dve od sledeće tri osobine za neki graf onda za taj graf važi i treća osobina:
N
čvorova ima N-1
granu