Magi

Contact info
Studies
  Scientific publications
  Master's thesis
Work
Software
Hobbies
Other Articles
  Evolution
  Metsola
  Pseudoart
Photography
Historical

© Marko Grönroos, 1998


[Päivitetty Fri Sep 5 17:16:15 1997]

Moduuli digraph.h

Connection : public CObject

Peruskytkentä. Ei painoa, tms.

Connection ()
Connection (Node& src, Node& trg)
virtual void make(Node& src, Node& trg) Initialisaattori. Sama kuin tuo 2. konstruktosi. Asettaa kytkennän yhdistämään kaksi solmua. Tarkoitettu käytettäväksi silloin kun kytkentä on alustettu käyttäen peruskonstruktoria.
void reroute(Node& target) Siirtää kytkennän uuteen kohteeseen.
bool operator==(const Connection& other) const Vertailuoperaattori. Kertoo ovatko kytkennät identtisiä isäntä- ja kohdesolmunsa suhteen. Lähinnä solmuluokan sisäiseen käyttöön; esimerkiksi Node::operator- () kutsuu tätä funktiota saadakseen selville josko kytkentä on jo olemassa.
bool connectedTo(const Node& other) const Kertoo onko kytkennän kohde sama kuin annettu
virtual ostream&operator>>(ostream& out) const Tulostaa kytkennän virtaan
const Node& getTarget() const Palauttaa kohdesolmun

WghtConnection : public Connection

Kytkentä, jolla on kokonaislukupaino. Vaatii, että kytketyt solmut ovat PlanarNode:ja.

WghtConnection ()
WghtConnection (Node& src, Node& trg)
void make(Node& src, Node& trg) Uudelleenmääritelty, jotta voidaan laskea parametrisolmujen välinen fyysinen etäisyys.
WeightTypeoperator=(WeightType newvalue) Painon asetus
WeightTypegetWeight() const Painon nouto
ostream&operator>>(ostream&) const Tulostaa painon

Node : public CObject

Perussolmu

Node ()
Node (const CString& connclass)
void make(const CString& connclass) Sama kuin 2. konstruktori yllä
virtual voidask(istream&, ostream&) Kysyy yksikön tiedot interaktiivisesti (vain ajettaessa komentoriviltä)
virtual voidreadFrom(ArrayIter<CString>& iter) Lukee solmun tiedot iteraattorista (ei kytkentöjä)
virtual CStringtoString() const Palauttaa solmun sisältöä kuvaavan merkkijonon (ei kytkentöjä)
Connection& connectTo(Node& target) Kytkee solmun toiseen, palauttaa tuloksena syntyneen kytkennän. Mikäli solmujen välillä jo oli kytkentä, palautetaan vanha kytkentä.
Node& operator>>(ostream&) Tulostaa solmun datan haluttuun virtaan tekstimuodossa.
Connection& operator-(Node&) Sokeroitu kytkentäoperaatio kahdelle solmulle. Käyttö:
Node a, b;
a-b = 5;
cout << (a-b);
Jossa solmut a ja b kytketään toisiinsa ja kytkennän painoksi asetetaan 5;
Palauttaa: luodun kytkennän.

Itse asiassa tämä ei saisi luoda kytkentää, vaan sitä varten tulisi olla oma operaationsa operator+, tms.

Connection* getConn(const Node& other) const Palauttaa kytkennän kohdesolmuun, tai NULL jos ei ole.
ArrayIter<Connection>*enumConns() const Palauttaa iteraattorin kytkentöihin. Iteraattori tuhottava käytön jälkeen.
const CArray<Connection>&getConns() const Palauttaa viittauksen kytkentävektoriin

Palauttaa kahden solmun välisen painon WeightType weight (Node&);
Connection& operator(Node&) Katkaisee kahden solmun välisen kytkennän
Connection& reroute(Node&) Asettaa solmun ainoan (!) kytkennän haluttuun solmuun. Tämä on hyödyllinen operaatio kauppamiehen matkustusongelmassa, jossa löydetyn reitin graafinen tulostus tapahtuu

PlanarNode : public Node

Tasokoordinaatistossa oleva solmu

intx, yTasokoordinaatit
void ask(istream&, ostream&) Kysyy yksikön tiedot interaktiivisesti
void readFrom(ArrayIter<CString>& iter) Lukee tiedot iteraattorista
int dist(const PlanarNode& other) const Laskee etäisyyden toiseen solmuun
CString toString() const Palauttaa "x,y"

NodeList

Lista solmujen indeksejä. Digraph-luokan TSP-algoritmi käyttää tätä paitsi sisäisessä käytössä, myös TSP-ketjun tulosten palauttamiseen.

intsizeTämänhetkinen listan pituus
NodeList (int n) Konstruktorin parametrina listan maksimipituus
const int& operator[](int i) const Noutaa alkion
int& operator[](int i)
void operator=(const NodeList& o) Kopiointioperaatio
void push(int value) Lisäys

GenericDigraph : public CObject

Yleinen digraafi, riippumaton sisäisestä muodosta. Tätä ei nyt niin kauheasti vielä hyödynnetä.

GenericDigraph ()
GenericDigraph (int, int)
virtual voidmake(int number_of_nodes) Alustusoperaatio. Ottaa parametrikseen solmujen lukumäärän.

Digraph : public GenericDigraph

Graafit (Graph-luokka) on määritelty rakentuvan kahdentyyppisistä objekteista; solmuista (Node) ja yksisuuntaisista kytkennöistä (Connection).

Digraph ()
Digraph (const CMap<CString,CString>& map) Konstruktorikuorrutus vastaavalle make:lle
~Digraph ()
virtual voidmake(int number_of_nodes) Alustusoperaatio. Ottaa parametrikseen solmujen lukumäärän.
bool make(const CMap<CString,CString>& map) Luo graafin sopivat kentät sisältävästä mapista (HTML-query)
CString toString(const NodeList* path=NULL) const Muuntaa graafin HTML-query-tyyppiseksi merkkijonoksi. Mikäli solmupolku on annettu, kyseiset kytkennät merkitään "M"-kirjaimella.
void edit(istream& in, ostream& out) Streamipohjainen interaktiivinen editori
void clean(int r) Siistii graafin visuaalisen esityksen jos graafi on luotu satunnaisesti. Se muuttelee solmujen koordinaatteja siten että ne ovat toisistaan vähintään etäisyydellä r.
const Node& operator[](int i) const Noutaa graafin solmun sen indeksinumeron perusteella
Node& operator[](int i)
int size() const Palauttaa solmujen määrän
int length(const NodeList& path) const Laskee annettujen solmujen kuvaaman reitin pituuden kokonaislukuna
void connarr(const NodeList& path) Kytkee graafin solmut parametrina annetun vektoriesityksen kuvaamalla tavalla.
NodeList* travel() const Ratkaisee kauppamatkustajan ongelman (kts. algoritmin kuvaus) graafille ja palauttaa ratkaisun edellämainitun tyyppisenä solmuvektorina. O(n^n) (!!!!!!?????) Huom! Ei suostu väkisinkään ajamaan yli 10:lle solmulle! Jos on yli 10 solmua, vain 8 ensimmäistä käsitellään, loput solmut jätetään ulkopuolelle.
NodeList* floyds(const Node& src, const Node& trg, bool trace = 0) const Palauttaa lyhimmän reitin pituuden kahden solmun välillä

TableDigraph : public GenericDigraph

Kompaktimpi esitysmuoto digraafille, jossa oletetaan kaikista solmuista olevan kytkentä kaikkiin solmuihin (myös itseensä). Erityisesti Floyd'sin algoritmi käyttää tätä esitysmuotoa. Huom! Solmuilla ei ole esitystä tässä graafimuodossa, eli ne eivät voi sisältää mitään erityistä dataa.

TableDigraph ()
TableDigraph (const Digraph& other)
~TableDigraph ()
void make(int nodes) Luo annetun kokoisen graafin. Huom. Tilantarve on solmujen määrän neliö.
void make(const Digraph& other) Muunnos tuosta toisesta tyypistä
NodeList*floyds(int src, int trg, bool trace = 0) Palauttaa lyhimmän reitin pituuden kahden solmun välillä
void print() const

Tämä dokumentti on generoitu automaattisella h2html-dokumenttigeneraattorilla, © 1995 Marko Grönroos.