Click here to load reader

PROBLEM SEDAM MOSTOVA KOENINGSBERGA

  • View
    249

  • Download
    9

Embed Size (px)

Text of PROBLEM SEDAM MOSTOVA KOENINGSBERGA

  • PRIRODOSLOVNO-MATEMATIKI FAKULTET

    SVEUILITE U SPLITU

    Ana Marjanovi

    PROBLEM SEDAM MOSTOVA KOENINGSBERGA

    ZAVRNI RAD

    Split, listopad 2012.

  • PRIRODOSLOVNO-MATEMATIKI FAKULTET

    SVEUILITE U SPLITU

    ZAVRNI RAD

    PROBELM SEDAM MOSTOVA KOENINGSBERGA

    MENTOR: STUDNET:

    Dr. sc. Slavomir Stankov Ana Marjanovi

    SMJER:

    Matematika-informatika

    NEPOSREDNI VODITELJ:

    Dr. sc. Ani Grubii

    Split, listopad 2012.

  • SADRAJ

    1. Uvod ................................................................................................................................... 1

    2. Osnovni pojmovi teorije grafova ........................................................................................ 2

    2.1. Definicija grafa ............................................................................................................ 2

    2.2. etnje, matrica incidencije i matrica susjedstva .......................................................... 3

    2.3. Eulerova tura i Eulerova staza ..................................................................................... 3

    3. Opis problema .................................................................................................................... 5

    3.1. Povijest Koeningsberga ............................................................................................... 5

    3.2. Tko je bio Leonhard Euler? ......................................................................................... 5

    4. Programski jezik C ................................................................................................................. 7

    4.1. Svojstva ....................................................................................................................... 7

    4.2. Struktura programa pisanog u C-u ............................................................................... 8

    5. Polje .................................................................................................................................... 9

    5.1. Definicija polja ............................................................................................................ 9

    5.2. Jednodimenzionalna polja ........................................................................................... 9

    5.3. Dvodimenzionalna polja ............................................................................................ 11

    6. Rjeenje problema ............................................................................................................ 12

    6.1. Eulerovo rjeenje problema ....................................................................................... 12

    6.2. Rjeenje problema pomou matrice susjedstva ......................................................... 13

    6.2.1. Poopenje problema ........................................................................................... 14

    6.3. Rjeenje problema pomou Fleuryjevog algoritma ................................................... 17

    6.4. Problem kineskog potara .......................................................................................... 19

  • 2

    7. Zakljuak .......................................................................................................................... 20

    8. Popis literature .................................................................................................................. 21

  • 1

    1. Uvod

    U ovom zavrnom radu obradit u temu pod nazivom Problem sedam mostova

    Koeningsberga.

    Problem sedam mostova usko je vezan sa granom matematike koja se zove teorija grafova pa

    su stoga osnovne definicije i teoremi iz tog podruja iskazani i dokazani u drugom poglavlju.

    U treem pogavlju opisan je problem sedam mostova te je prikazana povijest grada

    Koeningsberga. Jednako tako dan je kratak ivotopis Leonharda Eulera koji je postavio teoriju

    grafova i predstavio rjeenje problema sedam mostova.

    Budui sam programe koji rjeavaju problem sedam mostova napisala u programskoj jeziku

    C, u etvrtom su poglavlju objanjena neka njegova svojstva te sama struktura programskog

    jezika. U petom je poglavlju objanjena struktura pod nazivom polja podatka jer je to

    struktura na kojoj se temelje programi koji rjeavaju dani problem.

    U estom je poglavlju dano Eulerovo rjeenje problema te objanjeno rjeenje problema

    pomou matrice susjedstva. Jednako tako dano je poopenje problema i opisan Fleuryjev

    algoritam.

  • 2

    2. Osnovni pojmovi teorije grafova

    Grafovi su jedna od osnovnih matematikih struktura. Stoga se i pojavljuju u raznim oblicima

    i raznim situacijama. Mnoge se pojave modeliraju grafovima koji se sastoje od toaka i

    njihovih spojnica. Na primjer, toke (vrhovi ili vorovi) mogu predstavljati ljude iz neke

    skupine, a spojnice (bridovi) parove prijatelja. Graf moe predstavljati elektrinu mreu iji

    su vrhovi elektrike komponente, a spojnice elektrine veze. Cestovne, eljeznike,

    zrakoplovne veze itd. daljnji su primjeri modela s grafovima. U raunarstvu se esto dijagram

    toka nekog algoritma prikazuje grafom kojem su vorovi naredbe (instrukcije), a lukovi iz

    jedne u drugu naredbu su bridovi. Jednako tako grafovima se prezentiraju i razne

    kompjuterske strukture podataka, umreavanje i paralelizam raunala i njihov sekvencijalni

    rad, evolucijska ili porodina stabla u biologiji itd.

    2.1. Definicija grafa

    Definicija 2.1. Graf je ureeni par = (, ), gdje je = () skup vrhova, =() skup bridova disjunktnih s . Svaki brid spaja dva vrha , koji se zovu krajevi od . Kaemo jo da su vrhovi i incidentni s , a vrhovi i susjedni i piemo = {, }. Graf sa samo jednim vrhom zove se trivijalan, inae je netrivijalan. Usmjereni graf ili digraf je graf u kojem svaki brid ima smjer od poetka prema kraju. Definicija 2.2. Graf je ureene trojka = (, , ) gdje je

    : 2 funkcija koja svakom bridu e pridruuje 2-lani multiskup vrhova () = {, } koji se zovu krajevi od e.

    Definicija 2.3. Brid iji se krajevi podudaraju zove se petlja, a ako su krajevi razliiti pravi

    brid ili karika.

    Definicija 2.4. Graf je jednostavan ako nema petlji ni viestrukih bridova.

    Defincija 2.5. Jednostavan graf u kojem je svaki par vrhova spojen bridom naziva se potpun

    graf.

  • 3

    2.2. etnje, matrica incidencije i matrica susjedstva

    Definicija 2.6. etnja u grafu je niz = , iji su lanovi naizmjence vrhovi i bridovi , tako da su krajevi od vrhovi i , 1 # $. U jednostavnom je grafu tenja potpuno odreena samo nizom svojih vrhova . Kaemo da je poetak, a kraj etnje ili da je etnja od do ili (, )-etnja.

    Definicija 2.7. Neka je graf s vrhovima , , , & u nekom poretku i bridovima , , , ' u nekom poretku. Matrica incidencije grafa je (pravokutna) ( *-matrica + = +() = ,*-., gdje je *- = broj (0, 1 ili 2) koliko su puta i - incidentni. Matrica incidencije potpuno odreuje graf. Matrica susjedstva grafa je (kvadratna) ( (-matrica / = /() = ,0-., gdje je 0- = broj bridova koji spajaju i - . / je simetrina matrica (tj. 0- = 0-) iji su lanovi nenegativni cijeli brojevi. Ako je graf jednostavan, onda je /(0,1)-matrica, tj. 0- = 0#2#1, #, 4, a na glavnoj dijagonali su nule. I obrnuto, svaka takva matrica reprezentira neki graf. / je simetrina, pa ima ( realnih svojstvenih vrijednosti 5 5 5& ija je suma 78/ = 0 (ako je jednostavan).

    2.3. Eulerova tura i Eulerova staza

    Definicija 2.8. Eulerova tura na grafu je zatvorena staza koja sadi svaki brid. Dakle, to je

    zatvorena staza koja prolazi svakim bridom tono jedanput. Graf je Eulerov ako doputa

    Eulerovu turu.

    Teorem 2.1. Povezani graf je Eulerov ako i samo ako mu je svaki vrh parnog stupnja. Dokaz: : Neka je : Eulerova tura na . Svaki put kada : ue u vrh mora i izai iz . Tonije, ako fiksiramo jednu orijentaciju obilaska Eulerovom turom :, onda se skup bridova incidentnih sa moe particionirati u dva skupa: ulazei i izlazei iz i meu njima postoji oita bijekcija.

    : Glavni trik je da pogledamo najduu moguu stazu u i dokaemo da je Eulerova tura. Neka je, dakle, 7 = (, , , , ', ') najdua staza duljine *. Dovoljno je dokazati da je

    (i) = ' (ii) () = {, , , '}

  • 4

    Pretpostavimo da je ' . Tada je incidentan s neparnim brojem bridova iz 7. No, kako je

  • 3. Opis problema

    ovjek se svakodnevno susre

    B. Svaki takav problem svodi se na rjeavanje problema koritenjem mrenog modela. Jedan

    od najpoznatijih problema je upravo Problem sedam mostova Koeningsberga za kojeg je

    1735. godine vicarski znanstvenik Leonhard Euler donio negativan zaklju

    3.1. Povijest Koeningsberga

    Koeningsberg je bio glavni grad Prusije od kasnih godina srednjeg doba pa sve do 1701.

    godine kada je glavni grad postao Berlin. Izgra

    rijena otoka. Mostovi povezuju obje strane rijeke i otoke.

    Ime Koeningsberg doslovno zna

    Saveznikog bombardiranja 1944. godine te

    kod Koeningsberga. Pod vla

    Kalingrad. Danas je glavni grad Ruske Kaliningradske oblasti.

    3.2. Tko je bio Leonhard Euler?

    Leonhard Euler (1707. 1783.)

    znanstvenu djelatnost razvio je u Brlinu i Petrogradu gdje je drao katedru fizike i

    matematike. Njegova aktivnost nije stala ni kada je oslijepio jer je tada diktirao radove.

    Napisao je oko 900 radova. Razvi

    mnoge diferencijalne jednadbe, a u diferencijalnoj geometriji dao je prvu formulu

    5

    vno susree s problemima traenja puta od poetne to

    B. Svaki takav problem svodi se na rjeavanje problema koritenjem mrenog modela. Jedan

    od najpoznatijih problema je upravo Problem sedam mostova Koeningsberga za kojeg je

    vicarski znanstvenik Leonhard Euler donio negativan zaklju

    Povijest Koeningsberga

    Koeningsberg je bio glavni grad Prusije od kasnih godina srednjeg doba pa sve do 1701.

    godine kada je glavni grad postao Berlin. Izgraen je s obje strane rijeke Prege

    na otoka. Mostovi povezuju obje strane rijeke i otoke.

    Slika 1 Sedam mostova Koeningsberga

    Ime Koeningsberg doslovno znai kraljeva planina. Grad je teko ote

    kog bombardiranja 1944. godine te je osvojen od strane Crvene armije nakon Bitke

    kod Koeningsberga. Pod vlau sovjetskog voe Mikhaila Kalinina preimenovan je u

    Kalingrad. Danas je glavni grad Ruske Kaliningradske oblasti.

    Tko je bio Leonhard Euler?

    1783.) je bio vicarski matematiar, fiziar i astronom. Svoju

    znanstvenu djelatnost razvio je u Brlinu i Petrogradu gdje je drao katedru fizike i

    matematike. Njegova aktivnost nije stala ni kada je oslijepio jer je tada diktirao radove.

    Napisao je oko 900 radova. Razvio je teoriju redova, uveo tzv. Eulerove integrale, rjeio

    mnoge diferencijalne jednadbe, a u diferencijalnoj geometriji dao je prvu formulu

    etne toke A do odredita

    B. Svaki takav problem svodi se na rjeavanje problema koritenjem mrenog modela. Jedan

    od najpoznatijih problema je upravo Problem sedam mostova Koeningsberga za kojeg je

    vicarski znanstvenik Leonhard Euler donio negativan zakljuak.

    Koeningsberg je bio glavni grad Prusije od kasnih godina srednjeg doba pa sve do 1701.

    en je s obje strane rijeke Pregel i na dva

    i kraljeva planina. Grad je teko oteen tijekom

    je osvojen od strane Crvene armije nakon Bitke

    e Mikhaila Kalinina preimenovan je u

    ar i astronom. Svoju

    znanstvenu djelatnost razvio je u Brlinu i Petrogradu gdje je drao katedru fizike i

    matematike. Njegova aktivnost nije stala ni kada je oslijepio jer je tada diktirao radove.

    o je teoriju redova, uveo tzv. Eulerove integrale, rjeio

    mnoge diferencijalne jednadbe, a u diferencijalnoj geometriji dao je prvu formulu

  • 6

    zakrivljenosti ploha (Eulerova pouak). Razvio je teoriju turbina te prouavao irenje zvuka i

    svjetlosti. Euler je najproduktivniji matematiar u povijesti. Nakon njegove smrti,

    Sanktpeterburka je akademija jo punih 50 godina tiskala njegove neobjavljene radove.

    Euler se rodio u vicarskom gradu Baselu. Otac mu je bio pastor u protestantskoj crkvi, a

    majka je potjecala iz sveenike obitelji. Imao je dvije mlae sestre, a jedan od bliskih

    obiteljskih prijatelja bio je, tada ve poznati matematiar, Johann Bernoulli. Ve u ranoj dobi

    pokazao je zanimanje za matematiku i uoio rupe u svom znanju pa je zamolio Bernoullija za

    redovitu privatnu poduku. Iskusni Bernoulli brzo je uoio Eulerovu izuzetnu nadarenost te

    nazreo njegov silni znanstveni potencijal. Kad je Euler poeo studirati teologiju, uiti grki,

    latinski i hebrejski jezik, njegov se otac ponadao da e sin poi njgeovim stopama. Stoga

    Bernoulliju nije bilo nimalo lako uvjeriri oca kako mu je sin sudbinski predodreen postati

    velikim matematiarom. 1727. godine Euler je zavrio svoju doktorsku disertaciju o irenju

    zvuka, a iste mu je godine Parika akademija dodijelila drugu nagradu za rjeavanje problema

    o optimalnom smjetanju jarbola na jedrenjak.

    1727. Euler je dobio posao na Ruskoj carskoj akademiji znanosti u St. Petersburgu. 1731.

    posato je profesor fizike i u to je vrijeme napisao knjigu o teoriji glazbe te djelo Scientia

    navalis u kojoj izlae znanja iz hidrodinamike, gradnje brodova i navigacije. Dvije godine

    kasnije postao je voditelj matematikog odjela.

    Zbog uestalih nemira u Rusiji, 1741. sa obitelji se preselio u Berlin gdje je postao

    predvodnikom matematikog odjela na Sveuilitu. U Berlinu je proveo sljedeih 25 godina i

    u tom je periodu napisao preko 380 znanstvenih lanaka i objavio svoja dva velika djela:

    Introductio in analysis infinitorum i Institutiones calculi differentialis. Bio je lan gotovo svih

    znaajnih akademija u Europi i dobitnik brojnih priznanja i nagrada.

    1738. oslijepio je na desno oko. Sljepoa je bila posljedica trovanja zbog gnojnog ira.

    Usprkos svemu nastavio je raditi s jednakim arom, posvetio se izradi atlasa (izradio je

    pomorsku kartu Rusije) i zbirci karata za Sanktpeterburku akademiju. Nedugo nakon toga

    siva mrena prekrila mu je i lijevo oko te je bio potpuno slijep. Gotovo pola svog znanstvenog

    opusa stvorio je nakon gubitka vid. 1783. brzo i bezbolno umro je od izljeva krvi u mozak.

  • 7

    4. Programski jezik C

    Odluila sam se za pisanje programa u programskom jeziku C jer je to jezik ope namjene, to

    znai da se u njemu moe napisati apsolutno sve: od rjeavanja zadataka, do pisanja drivera,

    operacijskih sustava, tekst procesora ili igara. Kao jezik, ni u emu ne ograniava. Omoguuje

    i ukljuivanje naredbi pisanih asemblerski zbog ega je zajedno s mogunosu direktnog

    pristupa pojedinim bitovima, bajtovima ili cijelim blokovima memorije, pogodan za pisanje

    sistemskog softvera. C je meu popularnijim programskim jezicima i rabe ga mnogi

    programeri. Programi pisani u C-u su prenosivi (mogu se prevoditi i izvravati na razliitim

    porodicama raunala uz minimalne ili nikakve ispravke) i obino su vrlo brzi. Postoje mnogi

    prevoditelji za jezik C, a jedan od najire koritenih je GNU C Compiler.

    4.1. Svojstva

    Programski jezik C spada u proceduralne programske jezike. Razvijen je u 70-im godina 20.

    stoljea. Autor ovog programskog jezika je Dennis Ritchie stvorio je programski jezik za

    rjeavanje praktinih problema kodiranja sistemskih programa i jezgre operacijskog sustava

    UNIX, koji je praktiki u cijelosti napisan u C-u.

    C se tijekom godina dosta mijenjao te je u vie navrata neformalno i formalno standardiziran.

    Kao jedan od najvanijih jezika u povijesti komercijalne raunalne industrije, C je do danas

    ostao jedini programski jezik prilagoen za sve raunalne platforme, od malih sustava pa do

    mrenih superraunala. Programi napisani u njemu vrlo su bliski nainu rada hardvera te u

    naelu zahtijevaju od programera dobro razumijevanje rada procesora, memorije, ulazno-

    izlaznih sklopa itd. No, rad s registrima procesora i adresiranje memorije apstrahirani su

    pomou koncepta varijabli i pokazivaa to uz eksplicitne kontrolne strukture i funkcije

    znatno olakava programiranje u odnosu na izravno programiranje u strojnim jezicima.

    Tokom 1980-ih, Bjarne Stroustrup zajedno s drugim istaivaima proiruje C dodavajui

    sposobnosti objektno orijentiranog programiranja, a naziv ovog novog programskog jezika je

    C++. Naalost, ta 100%-tna kompatibilnost ujedno je i razlog to su problemi koje

    programiranje u C-u nosi sa sobom naslijeeni i u C++-u. Efikasno i sigurno programiranje u

    C-u vrlo je zahtjevna vjetina koja trai viegodinje iskustvo pa je stoga C jezik koji se ne

    preporuuje poetnicima, posebice ako im programiranje nije primarni posao.

  • 8

    Danas se relativno rijetko ukazuje potreba za pisanjem novih korisnikih aplikacija izravno u

    C-u, pa ak i u vrlo malim sustavima kao to su primjerice mobilni telefoni. Glavno podruje

    njegove upotrebe su sistemski programi na strani posluitelja, programi prevoditelji i jezgre

    operativnih sustava, gdje je potreba za najveom moguom brzinom izvoenja, efikasnom

    kontrolom resursa i izravnom kontrolom hardvera od primarne vanosti.

    4.2. Struktura programa pisanog u C-u

    Najjednostavniji program je onaj koji zadani tekst ispisuje na ekran. Da bi se mogao ispravno

    napisati ak i tako jednostavan program, potrebno je poznavati strukturu programa odabranog

    programskog jezika. Struktura programa odnosi se na nain pisanja programa i ako se ona ne

    potuje, program nee raditi, bez obzira na to to su upotrebljene sve potrebne naredbe.

    Svaki program pisan u programskom jeziku C sastavljen je od niza funkcija. Glavna i jedina

    obavezna funkcija u programu je funkcija main (). Program se moe sastojati i od veeg broja

    funkcija.

    Bitna razlika izmeu C-a i ostalih programskih jezika je u tome to u C-u ne postoje ugraene

    funkcije. One se nalaze u bibliotekama funkcija koje se isporuuju zajedno s prevoditeljem.

    Biblioteke funkcija nastale su standardizacijom C-a, pa je dovoljno na poetku programa

    najaviti da e se upotrebljavati odreena biblioteka i u cijelom programu dostupne su sve

    funkcije koje se u njoj nalaze. Tako se biblioteka u kojoj se nalaze funkcije za ulaz i izalz

    podataka naziva stdio.h, matematike funkcije nalaze se u biblioteci math.h, a funkcije za rad

    sa znakovinim varijablama u biblioteci string.h.

    Na poetku svakog C programa uobiajeno je pisati pretprocesorske naredbe kojima se

    pozivaju biblioteke funkcija koje se koriste u programu. Najee upotrebljavana

    pretprocesorska naredba je #include i obavezno se pie prije funkcije main ().

    Prevoenjem programa na mjesto naredbe #include kopira se sadraj navedene datoteke.

    Jednako tako, prije samo pisanja programa treba istaknuti da se programi napisani u C-u

    sastoje od niza meusobno povezanih funkcija iji broj nije ogranien. U svakom programu je

    obavezna samo jedan funkcija (funkcija main()) koja oznaava mjesto na kojem poinje

    izvravanje programa. Poetak i kraj funkcije oznaava se vitiastim zagradama. Nakon svake

    naredbe u C-u mora stajati znak ; koji oznaava kraj jedne i poetak druge naredbe.

  • 9

    5. Polje

    Budui e se programi koji rjeavaju problem sedam mostova temeljiti na strukutri koja se

    zove polje objasnimo kakva je to struktura.

    5.1. Definicija polja

    esto se u programima koriste skupovi istovjetnih podataka. Za oznaavanje i rukovanje

    takvim istovjetnim podacima bilo bi vrlo nespretno koristiti za svaki pojedini podatak zasebnu

    varijablu, primjerice x1, x2, x3 itd. Zamislimo samo da trebamo rezultate nekog mjerenja koji

    sadre 100 podataka statistiki obraditi, pri emu svaki podatak treba proi kroz isti niz

    raunskih operacija. Ako bismo koristili zasebna imena za svaki podatak, program bi se

    trebao sastojati od 100 istovjetnih blokova naredbi koji bi se razlikovali samo u imenu

    varijable koja se u dotinom bloku obrauje. Neefikasnost ovakvog postupka je vie nego

    oita. Daleko efikasnije je sve podatke smjestit pod isto nazivlje, a pojedini rezultat mjerenja

    dohvaati pomou brojanog indeksa. Ovakvu obradu podataka omoguavaju polja (nizovi)

    podataka.

    Polje podataka je niz konanog broja istovrsnih podataka lanova polja. Ti podaci mogu biti

    bilo kojeg tipa, ugraenog (primjerice float ili int) ili korisniki definiranog. Pojedini lanovi

    polja mogu se dohvaati pomou cjelobrojnih indeksa te mijenjati neovisno o ostalim

    lanovima polja.

    5.2. Jednodimenzionalna polja

    Najjednostavniji oblik polja su jednodimenzionalna polja kod kojih se lanovi dohvaaju

    preko samo jednog indeksa. lanovi polja sloeni su u linearnom slijedu, a indeks pojedinog

    lana odgovara njegovoj udaljenosti od poetnog lana.

    elimo li deklarirati jednodimenzionalno polje x koje e sadravati 5 decimalnih brojeva tipa

    float, napisat emo

    float x[5];

    Prevoditelj e ovom deklaracijom osigurati kontinuirani prostor u memoriji za pet podataka

    tipa float (Slika 2). Ovakvom deklaracijom lanovi polja nisu inicijalizirani,

  • 10

    Slika 2Deklaracija polja

    tako da imaju sluajne vrijednosti, ovisno o tome to se nalazilo u dijelu memorije koji je

    dodijeljen (alociran) polju. lanovi polja se mogu inicijalizirati prilikom deklaracije:

    float [x] = {1.1, 2.2, 3.3, 4.4, 5.5};

    Ovom naredbom se deklarira jednodimenzionalno polje x, te se lanovima tog polja

    pridjeljuju poetne vrijednosti. Vrijednosti se navode unutar vitiastih zagrada i odvajaju

    zarezima. Iako duljina polja nije eksplicitno navedena, prevoditelj e iz inicijalizacijske liste

    sam zakljuiti da je polje duljine 2 i rezervirati odgovarajui memorijski prostor (Slika 3).

    Slika 3 Jednodimenzionalno polje s inicijaliziranim lanovima

    Pri odabiru imena za polje treba voditi rauna da se ime polja ne smije podudarati s imenom

    neke varijable u podruju dosega polja, tj. u podruju u kojem je polje vidljivo. Prvi lan u

    polju ima indeks 0, a zadnji lan ima indeks za jedan manji od duljine polja.

    Jedno od ogranienja pri koritenju polja jest da duljina polja mora biti specificirana i poznata

    u trenutku prevoenja koda. Duljina jednom deklariranog polja se ne moe mijenjati tijekom

    izvoenja programa.

  • 11

    5.3. Dvodimenzionalna polja

    esto se javlja potreba za pohranjivanjem podataka u dvodimenzionalne ili

    viedimenzionalne strukture. elimo li pohraniti podatke iz neke tablice s 3 retka i 5 stupaca,

    najprikladnije ih je pohraniti u dvodimenzionalno polje:

    int Tablica [3][5];

    lanove tog dvodimenzionalnog polja dohvaamo preko dva indeksa: prvi je odreen retkom,

    a drugi stupcem u kojem se podatak u tablici nalazi. U sutini se ovo dvodimenzionalno polje

    moe shavtiti kao tri jednodimenzionalna polja od kojih je svako duljine 5 (Slika 4). Pravila

    koja vrijede za jednodimenzionlna polja vrijede i za viedimenzionalna polja. lanovi

    viedimenzionalnog polja mogu se takoer inicijalizirati prilikom deklaracije:

    int Tablica [3][5] = {{1, 2, 3, 4, 5}, {11, 12, 13, 14, 15}};

    Ovime se inicijaliziraju prva dva retka dok se lanovi treeg retka inicijaliziraju na nulu (kako

    je prikazano slikom 4).

    Slika 4 Prikaz dvodimenzionalnog polja

  • 12

    6. Rjeenje problema

    Na donjoj slici prikazan je raspored mostova. etiri dijela grada (sjeverni, juni i dva otoka)

    meusobno su povezani mostovima. Manji je otok s po dva mosta povezan sa sjevernim i s

    junim dijelom grada dok je vei povezan s po jednim mostom sa sjevernim i s junim

    dijelom. Jedan je most povezivao oba otoka.

    Slika 5 Raspored mostova

    Problem Koeningsberga svodi se na pitanje je li mogue prijei preko svih sedam mostova

    tako da se preko svakog mosta prijee tono jednom.

    6.1. Eulerovo rjeenje problema

    Problem sedam mostova privukao je pozornost Leonhardu Euleru koji je 1735. godine

    predstavio rjeenje problema. Euler je iznio pretpostavku da je izbor puta na kopnu nebitan.

    Jedino vano svojstvo svake rute je slijed prelazaka preko mostova. Ta mu je pretpostavka

    omoguila da ukloni sva svojstva, osim kopnenih povrina i mostova koji ih povezuju te je na

    taj nain stvorio apstraktni prikaz problema. U tom sluaju svaka kopnena povrina (obale

    rijeke i otoci) prikazana je vorom ili vrhom, a svaki most kao brid. Bridovi povezuju vorove

    i tvore matematiku strukturu koja se naziva graf.

  • 13

    Slika 6 Grafiki prikaz mostova

    Osim krajnjih toaka etnje, dolazak na vor i odlazak mora biti preko mosta (brida). Dakle,

    tijekom etnje po grafu, broj puta kada se doe do vora (a da vor nije kraj puta) jednak je

    broju puta kada se izae s tog vora. To znai da broj mostova koji dodiruju kopno mora biti

    paran ukoliko most elimo prijei samo jednom. Polovica tih mostova e biti prohodana kada

    se ide prema kopnu, a polovica kada se ide od kopna. Budui da su svi vorovi spojeni s

    neparnim brojem bridova, nije mogue proi sve mostove samo jednom.

    Euler je pokazao da etnja po grafu u kojoj se svaki brid koristi samo jednom ovisi o stupnju

    vorova. Stupanj vora predstavlja broj bridova koji ga dotiu. etnja e biti mogua samo

    ako je graf spojen i ako nula ili dva vora imaju neparan stupanj. Ovakva etnja po grafu zove

    se Eulerova etnja, a ostvariva je samo ako zapoinje na voru s neparnim stupnjem i

    zavrava na voru s neparnim stupnjem. Ovakvim nainom razmiljanja Euler je postavio

    temelje teorije grafova.

    6.2. Rjeenje problema pomou matrice susjedstva

    Problem sedam mostova Koeningsberga moe se na vrlo jednostavan nain rijeiti pomou

    matrice susjedstva.

    Nain rada programa opisan je pseudokodom:

    1. Poetak

    2. Program povezuje 4 vora sa 7 bridova

    3. Program generira matricu susjedstva s obzirom na vorove i bridove

    4. Program provjerava je li mogue prijei svaki brid tono jednom na nain da broji

    vorove sa neparnim bridovima

    5. Ako je broj vorova sa neparnim bridovima razliit od 0 ili 2 zakljuuje da

    problem nema rjeenje i ispisuje odgovarajuu poruku na ekran

    6. Kraj

  • 14

    Dakle, program se sastoji od dva dvodimenzionalna polja cijelih brojeva (graf,

    matrica_susjedstva), polja cijelih brojeva (zbroj_bridova) te cijelih brojeva broj_cvorova i

    broj_bridova. Broj_cvorova predstavlja broj otoka i obala te iznosi 4 dok broj_bridova

    predstavlja mostove koji povezuju otoke te iznosi 7. Program povezuje bridove i vorove te

    poziva funkcije matrica_susjedstva() i je_li_moguce_proci().

    Funkcija matrica_susjedstva generira matricu susjedstva s obzirom na vorove i bridove koji

    su ranije uneseni te zbaraja retke matrice, odnosno bridove incidentne odgovarajuem vrhu i

    sprema ih u polje zbroj_bridova. Budui je raspored bridova i vrhova za problem sedam

    mostova unaprijed poznat matrica susjedstva ima sljedei oblik:

    F0 22 01 11 21 00 12 01 0 G

    Funkcija je_li_moguce_proci zbraja vorove sa neparnim bridovima i rezultat pohranjuje u

    varijablu broj_neparnih. Budui je broj_neparnih u ovom sluaju razliit od nula i od dva

    zakljuujemo (po Korolaru 2.1.) da problem nema rjeenje te program na ekran ispisuje

    odgovarajuu poruku o tome.

    6.2.1. Poopenje problema

    Problem sedam mostova moe se poopiti na sljedei nain: Neka ( obala ili otoka povezuje * mostova. Je li mogue svaki od tih mostova prijei tono jednom?

  • 15

    I ovaj se problem moe rijeiti pomou matrice susjedstva na slian nain kao i prije. Nain

    rada programa koji rjeava ovaj problem dan je pseudokodm:

    1. Poetak

    2. Korisnik unosi broj bridova i broj vorova te je li graf usmjeren i teinski

    3. Korisnik povezuje bridove sa vorovima

    4. Ako je graf teinski korisnik unosi teinu svakog brida

    5. Program generira matricu susjedstva na osnovu unesenih vorova i bridova te u

    sluaju usmjerenog grafa ispisuje odgovarajuu poruku ako vor nije povezan ni s

    jednim vorom, ako vor ima bridove koji vode u njega ali ni jedan iz njega i ako

    vor ima bridove prema drugim vorovima ali ni jedan vor nema bridove prema

    njemu.

    6. Program provjerava je li mogue prijei svaki brid tono jednom na nain da broji

    vorove sa neparnim bridovima

    7. Ako je broj vorova sa neparnim bridovima razliit od 0 ili 2 zakljuuje da

    problem nema rjeenja i ispisuje poruku na ekran

    8. Ako je broj vorova sa neparnim bridovima tono dva zakljuuje da problem ima

    rjeenje ako i samo ako putovanje poinje u jednom i zavrava u drugom voru sa

    neparnim brojem bridova te ispisuje poruku na ekran

    9. Inae, zakljuuje da problem ima rjeenje i ispisuje poruku na ekran

    10. Kraj

    Ovaj program ima iste globalne varijable kao i program koji rjeava problem sedam mostova,

    dakle graf, matrica_susjedstva, zbroj_bridova, broj_cvorova i broj_bridova. U ovom sluaju

    broj vorova i bridova nije unaprijed poznat te ga unosi korisnik pri pokretanju programa.

    Jednako tako korisnik unosi veze izmeu bridova i vorova. Nakon toga se pozivaju funkcije

    matrica_susjed() i je_li_moguce_proci().

    Funkcija matrica_susjed generira matricu susjedstva s obzirom na unesene vorove i bridove

    te kao i prethodno zbraja retke matrice. Ova funkcija je neto sloenija od funkcije

    matrica_susjed u prethodnom programu jer se mora uzeti u obzir da graf moe biti usmjeren

    pa ovisno o tome postoje:

    a) vorovi koji nisu povezani sa niti jednim vorom

    b) vorovi sa bridovima koji vode u njega ali ne i iz njega

  • 16

    c) vorovi sa bridovima koji vode prema drugim vorovima ali ni jednim koji vodi

    prema njemu

    d) vorovi sa bridovima koji vode iz njega i prema njemu

    Funkcija je_li_moguce_proci zbraja vrhove sa neparnim brojem bridova i u ovisnosti o tome

    zakljuuje je li mogue rjeenje problema.

    Primjer: Postoji li rjeenje problema za graf sa 5 vrhova i 10 bridova koji su povezani kao na

    slici ispod?

    Rjeenje:

  • 17

    6.3. Rjeenje problema pomou Fleuryjevog algoritma

    Ako je G Eulerov graf, onda je svaka Eulerova tura na G optimalna jer se njome svaki brid

    prijee tono jedanput. U tom sluaju problem se rijeava Fleuryjevim algoritmom koji

    konstruira Eulerovu turu tako da pone u nekom vrhu i u svakom koraku bira vezni brid

    neprijeenog podgrafa samo da nema alternative. Lako je utvrditi sadri li graf Eulerovu

    stazu, tj. Eulerovu turu. Ostaje jedino problem kako ih nai. To se radi pomou Fleuryjevog

    algoritma. Fleuryjev algoritam je jednostavan ali veoma spor algoritam za nalaenje Eulerove

    ture.

    Postupak prema tom algoritmu je sljedei:

    1. Poetak

    2. Program izabere neki vrh i ide dalje du bilo kojeg ruba tog vrha na drugi vrh.

    Nakon toga ukloni taj rub s grafa.

    3. Sada smo na vrhu izmijenjenog grafa. Program odabere bilo koji rub od ovog

    tjemena ali ne smije biti rezni rub (osim u sluaju da nema druge mogunosti). Ide

    dalje du odabranog ruba i uklanja taj rub s grafa.

    4. Ponavlja trei korak dok ne iskoristi sve rubove i doe natrag na vrh s kojeg je

    zapoeo.

    5. Kraj

    Primjer nalaenja Eulerove ture na grafu sa 6 vrhova i 8 bridova:

    1. Uklonimo brid 2 i dobijemo sljedei graf

  • 18

    2. Uklonima brid 5 i dobijemo sljedei graf

    3. Uklonimo brid 7 i dobijemo sljedei graf.

    4. Uklonimo brid 6 i dobijemo sljedei graf

  • 19

    5. Zavrimo prolaskom kroz bridove 8 3 4 1 6. Dakle, kompletna Eulerova tura je 2 5 7 6 8 3 4 1

    6.4. Problem kineskog potara

    Problem sedam mostova ima primjenu na mnoge probleme iz teorije grafova. Jedan od

    poznatijih je problem kineskog potara koji se moe rijeiti pomou Fleuryjevog algoritma.

    Kineski potar treba pokupiti pisma u potanskom uredu, dostaviti pisma u svim ulicama koje

    spadaju u njegovo podruje i na kraju se vratiti u potanski ured i pri tome posao treba obaviti

    sa to manje hodanja kako bi utedio trud i vrijeme. Dakle, problem kineskog potara je

    primjer u kojem pokuavamo nai etnju kojom prolazimo kroz svaki brid na grafu samo

    jednom i to uiniti na najkrai mogui nain koristei se usmjerenim ili neusmjerenim

    grafom. Primjetimo da se problem kineskog potara razlikuje od problema sedam mostova u

    tome to problem kineskog potara zahtjeva da se vratimo u poetnu toku i da prilikom

    putovanja pronaemo najkrai put.

  • 20

    7. Zakljuak

    I danas, 272 godine nakon Eulerovog rjeenja problema Koeningsberkih mostova ovaj

    probmel privlai panju i jo je uvijek aktualan. Stoga se moe rei da je to jedan od

    najljepih problema teorije grafova.

  • 21

    8. Popis literature

    1. Darko Veljan, Kombinatorna i diskretna matematika, Algoritam, Zagreb, 2001.

    2. Jurijan ribar i Boris Motik, Demistificirani C++, Element, Zagrab, 2006.

    3. https://sites.google.com/site/sandasutalo/osnove-programiranja/polja-

    nizovi/visedimenzionalno-polje

    4. http://www.fer.unizg.hr/_download/repository/05-Polja-CB.pdf

    5. http://hr.wikipedia.org/wiki/Leonhard_Euler

    6. http://hr.wikipedia.org/wiki/C_(programski_jezik)

    7. http://e.math.hr/math_e_article/br14/fosner_kramberger

    8. http://biblio.irb.hr/prikazi-rad?&lang=en...&rad=558428

    9. http://www.selimbegovic.com/Dokumenti/Metricki%20problemi%20u%20teoriji%20

    grafova.pdf