Professional Documents
Culture Documents
Primjena Grafova
Primjena Grafova
FILIP JURMAN
Seminarski rad
FILIP JURMAN
Seminarski rad
ZAKLJUČAK ..................................................................................................................................................... 11
Prilog ................................................................................................................................................................. 13
1. UVOD
1Kopić, M.,Klobučar, A.; Mostovi Kaliningrada nekad i sada, OSJEČKI MATEMATIČKI LIST 7, Odjel za
matematiku, Osijek, 2007., str. 33.-34
1
2. PRIMJENA GRAFOVA
Definicija grafa: Graf G sadrži set objekata V = {v1, v2, v3,...} nazvanim čvorovima i
drugi set E = { e1, e2, e3,...} čiji se elementi nazivaju bridovi (također zvanim linijama i
lukovima). Set V(G) se naziva čvorišnim setom G i E(G) se naziva rubni set. Uobičajeno je
da se graf zapisuje u obliku G = (V, E).2
Jedna od kasnijih primjena javlja se sredinom 19. stoljeća prilikom analize električnih
mreža, g. Kirchhoff u članku objavljuje kako koristeći se pojmovima teorije grafova
omogućuje da se osnovni zakoni kao što su I i II Kirchhoffovi zakoni o raspodjeli struja
primjene.3
2 D. Galac, Izrada multimodalnog planera putovanja za područje grada Zadra, Sveučilište u Zagrebu, Fakultet
Prometnih znanosti, Zagreb, 2015., str. 8
3 Mateljan, et al., Teorija grafova i linearno programiranje, Elektrotehnički fakultet u Sarajevu, 2015., str. 1.
4 op. cit., str. 8-9
2
Slika 2: Primjer grafova
Izvor: Mateljan, et al., Teorija grafova i linearno programiranje, Elektrotehnički fakultet u Sarajevu, 2015.,
str. 1.
Šetnja predstavlja ograničen broj alternativnih sekvenci čvorova i bridova gdje počinju i
završavaju sa čvorovima gdje a) svaki brid u sekvenci spaja vrhove koji ga prethode i
slijede ga u nizu, tj pruža mogućnost ponavljanja, dok b) niti jedan brid se ne pojavljuje
više od jednom u sekvenci. Na slici 3 prikazani graf služi kao primjer definiranja šetnje,
v2e4v6e5v4e3v3 i v1e8v2e4v6e6v5e7v5 predstavljaju šetnje.
Orijentirani ili usmjereni grafovi predstavljaju grafove u kojima su grane tj. bridovi
5 C. Vasudev, Graph Theory with Application, New Delhi, New Age International Ltd., 2006, str. 56.-58.
3
označeni sa strelicom koja označava orijentaciju u vezi između dva brida. S toga može se
zaključiti da je usmjereni graf uređena trojka G = (V,E, ϕ) gdje je V= V(G) neprazan skup
čiji elementi predstavljaju čvorove, E=E(G) predstavlja skup usmjerenih bridova, a
funkcija ϕ predstavlja funkciju incidencije s kojom se svakom bridu e iz E pridružuje
uređeni par (u,v), gdje je u početni vrh, a v je krajnji vrh od e. Neorijentirani grafovi ne
sadrže strelicu orijentacije bridova pri čemu se podrazumijeva da postoji veza u oba
smjera tj. dva smjera se smatraju različitim bridovima.6 Slika 4 prikazuje neorijentirani
graf (lijevo) i orijentirani graf (desno).7
6 T. Carić, Optimizacija prometnih procesa, Fakultet prometnih znanosti; Sveučilište u Zagrebu, 2014.,str. 5
4
Slika 5: Kenigsberg i mostovi
Izvor: St. Clair, N.; Graph Theory Problems, Berkeley Math Circels, 2015, str. 1
8 A. Bellew, Solving the Königsberg Bridge Problem, IB Mathematics HL, Internal Assessment,2017.,str 1.
5
stupanj. Eulerova šetnja ostvariva je ako se počinje i završava na čvoru s neparnim
stupnjem. Takvim negativnim odgovorom Euler postavlja temelje teorije grafova. 9
9 A. Marjanović, Problem sedam mostova Koeningsberga, Zavrpni rad, Sveučilište u Splitu; Prirodoslovno-
matematički fakultet, 2012., str. 13.
10 I. Komar, ZIS i teorija grafova, Seminarski rad, Sveučilište u Zagrebu, Fakultet organizacije i informatike
6
2.3.1 Eulerov graf
Zatvorena šetnja na grafu G koja sadrži sve rubove grafa G naziva se Eulerovom
linijom, dok graf koji sadrži Eulerovu liniju naziva se Eulerov graf. Budući da su šetnje
uvijek povezane, Eulerova linija sadrži sve bridove grafa, stoga Eulerov graf spojen je za
sve osim izoliranih čvorova koje graf može sadržavati tj. graf mora sadržavati zatvorene
krugove između čvorova (slika 7), također ne-Eulerov graf može biti i Super-Eulerski graf
ukoliko sadrži Eulerski podgraf.
(slika 9).12
Graf G može biti pod-Eulerskim grafom ako i samo ako graf G nije upotpunjen
bipartitnim grafom. Bipartitni graf je graf kojem se vrhovi mogu podijeliti na dva skupa
pri tome da sve veze iz jednog skupa prelaze u drugi. Slika 8 prikazuje bipartitni graf.
7
Izvor: http://wiki.xfer.hr/grafovi_matching/
Budući da graf G sadrži trokut ima zatvorenu šetnju. Graf W spada pod najdulju zatvorenu
šetnju u grafu G, tada W obuhvaća i Eulerski podgraf G. Ukoliko ne, postoji da v nije
element W i v je susjedan čvoru u u W, uv pripada trokutu uvw, a ako niti jedan brid takvog
trokuta ne pripada grafu W, onda je W unija skupa {uv, vw, wu} koja sadrži šetnju dulju od
grafa W. Ako je uw element od W onda je (W – uw) U {uv, vw} što čini zatvorenu šetnju
dulju od W. Takva kontradikcija dokazuje da W obuhvaća zatvorenu šenjtu grafa G.13
Ako i samo ako su svi vrhovi parnog stupnja neprazni povezani graf je Eulerov graf.
Kako je dokazana Eulerova tura, onda će svaki vrh u koji se uđe dati mogućnost izlaza što
znači da su stupnjevi svih bridova parni brojevi. Pretpostavka da je pseudograf povezan
te da su svi vrhovi parnog stupnja, neka je v vrh u grafu. Ako ima vrh ima i petlji koje treba
slijediti bez ponavljanja. Ako je broj vrhova u grafu barem jednak dva, postoji barem jedan
vrh v1 s kojim se povezuje. Nakon obilaska svih petlji ili bridova u vrhu v1 prelazimo na vrh
v2 . Pri svakom dolasku u novi vrh, obilaze se sve petlje, a onda se potom izlazi iz vrha, te
je uvijek moguće izaći iz vrha u kojeg se i ulazi, ako je stupanj svakog vrha paran broj. Uz
pretpostavku da je tura C1 zaokružena, moguće je vratiti se u vrh v i ako su svi bridovi
8
obiđeni zatvoren je krug. Ukoliko to nije moguće Eulerova tura je nepostojeća pa se
izbacuju iz grafa C1 svi bridovi koji su izolirani. Ako imamo graf G1 koji je graf G bez grafa
C1 i postupak se ponovi. Graf G povezan je sa grafom G1 i C1 sa zajedničkim vrhom u, onda
se iz vrha u kreće u turu C u G1 koja je kombinirana sa prethodnom turom, tako da se onda
kreće u v i vraća u u, gdje se nastavlja sa turom C1. Tako se stvara tura C2 koja sadrži više
uključenih bridova od ture C1, te se postupak ponavlja dok se ne iscpre svi vrhovi i bridovi
iz konačnog grafa G.14
14 B. Divjak, et al., Diskretna matematika s teorijom grafova, Fakultet organizacije i informatike Sveučilišta
u Zagrebu, Varaždin, 2005., str. 202.
15 Ibidem, str. 214.
16 DeLaunay, M., Crossing the Bridges: Eulerian Graph Theory, 2010. str. 5
9
Fleuryjev algoritam može se očitati kao: Ulaz označava Eulerov graf G, u ovom slučaju
ulaz predstavlja unos broja čvorova i bridova, Izlaz postojanje Eulerove ture C na grafu
G, gdje u rezultatu izvođenja prikazano na slici 11. kako za problem sedam mostova nema
riješenja. Korak 1 označavao bi izabiranje proizvoljnog vrha v, te se postavlja kao tekući
vrh. Korak 2 proizvoljno se označava brid e koji je u vezi s izabranim vrhom, te brid nije
rezni i dodaje ga se na stazu C. Ako nema drugih mogućnosti za odabrani brid, onda se za
odabrani vrh uzima idući vrh s drugog kraja odabranog brida. Korak 3 prijeđeni brid se
briše, te se prelazi na idući tekući tj. ponavlja se Korak 2, ukoliko nema preostalih bridova
Kraj.
10
ZAKLJUČAK
11
Popis literature
1. Begović, A., et al., Teorija grafova. Osnovni pojmovi u teoriji grafova. Primjena
teorije grafova u prometu., Univerzitet u Sarajevu, 2014., str. 22.
2. Bellew, A., Solving the Königsberg Bridge Problem, IB Mathematics HL, Internal
Assessment,2017.,str 1.
3. Carić, T., Optimizacija prometnih procesa, Fakultet prometnih znanosti; Sveučilište
u Zagrebu, 2014.
4. DeLaunay, M., Crossing the Bridges: Eulerian Graph Theory, 2010.
5. Divjak, B., et al., Diskretna matematika s teorijom grafova, Fakultet organizacije i
informatike Sveučilišta u Zagrebu, Varaždin, 2005.
6. DeLaunay, M., Crossing the Bridges: Eulerian Graph Theory, 2010.
7. Galac, D., Izrada multimodalnog planera putovanja za područje grada Zadra,
Sveučilište u Zagrebu, Fakultet Prometnih znanosti, Zagreb, 2015.
8. Komar, I., ZIS i teorija grafova, Seminarski rad, Sveučilište u Zagrebu, Fakultet
organizacije i informatike Varaždin, 2011.
9. Kopić, M.,Klobučar, A.; Mostovi Kaliningrada nekad i sada, OSJEČKI MATEMATIČKI
LIST 7, Odjel za matematiku, Osijek, 2007.
10. Marjanović, A., Problem sedam mostova Koeningsberga, Zavrpni rad, Sveučilište u
Splitu; Prirodoslovno-matematički fakultet, 2012.
11. Mateljan, et al., Teorija grafova i linearno programiranje, Elektrotehnički fakultet
u Sarajevu, 2015.
12. Vasudev. C., Graph Theory with Application, New Delhi, New Age International
Ltd., 2006.
Internet izvori:
13. Internet izvor: 3. Eulerian and Hamiltonian Graphs
http://compalg.inf.elte.hu/~tony/Oktatas/TDK/FINAL/Chap%203.PDF, pristupljeno
30.03.2019
12
Prilog
#include <iostream>
#include <string.h>
#include <algorithm>
#include <list>
#include<stdio.h>
int n;
using namespace std;
//klasa Euler sa svim metodama
class Euler
{
int V;
list<int> *adj;
public:
Euler(int V) { this->V = V; adj = new list<int>[V]; }
~Euler() { delete [] adj; }
void Euler::printEulerUtil(int u)
{
list<int>::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
{
int v = *i;
if (v != -1 && isValidNextEdge(u, v))
{
cout << u << "-" << v << " ";
rmvEdge(u, v);
printEulerUtil(v);
}
}
13
}
//provjera za postojeci iduci brid
bool Euler::isValidNextEdge(int u, int v)
{
int count = 0;
list<int>::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
if (*i != -1)
count++;
if (count == 1)
return true;
bool visited[V];
memset(visited, false, V);
int count1 = DFSCount(u, visited);
//poziv za micanje prijedenog brida
rmvEdge(u, v);
memset(visited, false, V);
int count2 = DFSCount(u, visited);
//dodavanje iduceg brida
addEdge(u, v);
list<int>::iterator i;
for (i = adj[v].begin(); i != adj[v].end(); ++i)
if (*i != -1 && !visited[*i])
count += DFSCount(*i, visited);
return count;
}
//provjera brojaca
//provjera postoji li ili ne staza/setnja
int Euler::iseuler(int a[])
{
14
int count = 0;
for(int i=0;i<n;i++){
if(a[i] % 2 != 0)
count++;
}
if(count == 0){
cout<<"Eulerova staza postoji:\n";
return 1;
}
else if(count == 2){
cout<<"Eulerova setnja postoji:\n";
return 1;
}
else{
cout<<"Ne postoji eulerova staza ili setnja:'\n\n";
return -1;
}
}
int main()
{
int i,j,v1,v2,Edges;
cout<<"\n Unesi broj cvorova na grafu: ";
cin>>n;
Euler g1(n);
int a[n] = {0};
bool graph1[10][10];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
graph1[i][j]=0;
cout<<"\n Unesi broj bridova: ";
cin>>Edges;
for(i=1;i<=Edges;i++)
{
cout<<"\n Unesi bridove: ";
cin>>v1>>v2;
graph1[v1][v2]=1;
graph1[v2][v1]=1;
g1.addEdge(v1, v2);
a[v1]++;
a[v2]++;
}
cout<<"\n";
if(g1.iseuler(a) == 1)
g1.printEulerTour();
return 0;
}
Prema uzoru na Fleuryjev algoritam, autor: smarth-p (https://github.com/samarth-
p/Euler-and-Hamiltonian-Path)
15