# Suuntaamattoman verkon funktioiden esittelyt

Suuntaamaton verkko G (graph) koostuu solmuista ja kaarista kuten suunnattu verkkokin, mutta suuntaamattoman verkon kaaria ei varusteta suunnalla. Suunnatusta verkosta poiketen, suuntaamattoman verkon kaaren ei sallita johtavan solmusta itseensä ja kahden eri solmun välillä saa olla vain yksi kaari.

Verkko on jono jonka alkioilla on tärkeysjärjestys. Vietäessä alkiota jonoon määritellään alkion tärkeys, ja jonosta poistetaan aina parhaan prioriteetin omaava alkio.Kirjastossa on määritelty tyyppi PRIORITYTYPE, joka on alustavasti liukulukutyyppiä float/real. verkkoa voidaan käsitellä yleisen verkkon avulla tietämättä jonon oikeaa tyyppiä, aivan kuten esimerkiksi jonon tapauksessa. Tietorakennekirjastoon on toteutettu neljä erilaista tyypitettyä jonotyyppiä : kokonaisluku-verkko, joka sisältää int / integer - arvoja, liukuluku-verkko (sisältää float / real - tyyppistä tietoa), merkkijono-verkko (char* / string[ ]) ja osoitin-verkko (void* / pointer - tyyppistä tietoa).

Funktioista / proseduureista esitellään aina ensiksi C-kieliset, sitten Pascal-kieliset versiot. Kaikkien funktioiden käytössä oletetaan että jono on määritelty. Mikäli parametrina annettava jono P on määrittelemätön, on aliohjelmien toiminta määrittelemätöntä, lukuunottamatta tietenkin PRIQUEUE_CREATE:a joka määrittelee jonon.

- GRAPH_INSERT_EDGE (G,from,to,lbl,cst,col)
- GRAPH_DELETE_EDGE (G,E)
- GRAPH_RETRIEVE_EDGE (G,V1,V2)
- GRAPH_EDGE_ANY (G,i)
- GRAPH_EDGE_ANOTHER (G,i)
- GRAPH_EDGE_ANY_ADJ (G,E,i);
- GRAPH_EDGE_ANOTHER_ADJ (G,E,i)
- GRAPH_EDGE_ITERATING_ADJ (G,E,i)
- GRAPH_ASSIGN_EDGE_COLOR(G,E,col)
- GRAPH_ASSIGN_EDGE_COST(G,E,cst)
- GRAPH_ASSIGN_EDGE_LABEL(G,E,lbl)

## Funktioiden esittelyt

GRAPH_INSERT_EDGE (G,from,to,lbl,cst,col)

GRAPH_EDGE GRAPH_INSERT_EDGE (GRAPH G, GRAPH_VERTEX from, GRAPH_VERTEX to, GRAPH_LABELTYPE lbl, GRAPH_COSTTYPE cst, GRAPH_COLORTYPE col)

function GRAPH_INSERT_EDGE (G:GRAPH; from:GRAPH_VERTEX; to:GRAPH_VERTEX; lbl:GRAPH_LABELTYPE; cst:GRAPH_COSTTYPE; col:GRAPH_COLORTYPE):GRAPH_EDGE;

Vie suunnattuun verkkoon kaksi uutta kaarta. Nimiöksi tulee lbl, väriksi col ja painoksi cst. Palauttaa tehdyn kaaren.

Aikavaativuus : O(1)

GRAPH_DELETE_EDGE (G,E)

void GRAPH_DELETE_EDGE (GRAPH G, GRAPH_EDGE E)

procedure GRAPH_DELETE_EDGE (G:GRAPH;E:GRAPH_EDGE);

Poistaa verkosta G kaaren E.

Aikavaativuus : O(|E|)

GRAPH_RETRIEVE_EDGE (G,V1,V2)

GRAPH_EDGE GRAPH_RETRIEVE_EDGE (GRAPH G, GRAPH_VERTEX V1, GRAPH_VERTEX V2)

function GRAPH_RETRIEVE_EDGE (G:GRAPH;V1:G_VERTEX;V2:G_VERTEX):GRAPH_EDGE;

Palauttaa solmujen V1 ja V2 välillä olevan kaaren jos sellainen on.

Aikavaativuus : O(|E|)

GRAPH_EDGE_ANY (G,i)

GRAPH_EDGE GRAPH_EDGE_ANY (GRAPH G, GRAPH_EDGE_ITERATOR* i)

function GRAPH_EDGE_ANY (G:GRAPH;i:GRAPH_EDGE_ITERATOR):GRAPH_EDGE;

Palauttaa ensimmäisen löydetyn kaaren koko verkosta (tai null jos kaaria ei ole).

Aikavaativuus : O(|V|)

GRAPH_EDGE_ANOTHER (G,i)

GRAPH_EDGE GRAPH_EDGE_ANOTHER (GRAPH G, GRAPH_EDGE_ITERATOR* i)

function GRAPH_EDGE_ANOTHER (G:GRAPH;i:GRAPH_EDGE_ITERATOR):GRAPH_EDGE;

Palauttaa järjestyksessä seuraavan löydetyn kaaren (tai NULL jos niitä ei enää ole).

Aikavaativuus : O(|V+E|)

GRAPH_EDGE_ANY_ADJ (G,E,i);

GRAPH_EDGE GRAPH_EDGE_ANY_ADJ (GRAPH G, GRAPH_EDGE E, GRAPH_EDGE_ITERATOR* i)

function GRAPH_EDGE_ANY_ADJ (G:GRAPH;E:GRAPH_EDGE;i:GRAPH_EDGE_ITERATOR):GRAPH_EDGE;

Palauttaa kaaren E ensimmäisen naapurin, eli samasta solmusta lähtevän kaaren.

Aikavaativuus : O(1)

GRAPH_EDGE_ANOTHER_ADJ (G,E,i)

GRAPH_EDGE GRAPH_EDGE_ANOTHER_ADJ (GRAPH G, GRAPH_EDGE E, GRAPH_EDGE_ITERATOR* i)

function GRAPH_EDGE_ANOTHER_ADJ (G:GRAPH;E:GRAPH_EDGE;i:GRAPH_EDGE_ITERATOR):GRAPH_EDGE;

Palauttaa järjestyksessä seuraavan kaaren naapurin mikäli niitä on.

Aikavaativuus : O(1)

GRAPH_EDGE_ITERATING_ADJ (G,E,i)

int GRAPH_EDGE_ITERATINGRAPH_ADJ (GRAPH G, GRAPH_EDGE E, GRAPH_EDGE_ITERATOR i)

function GRAPH_EDGE_ITERATING_ADJ (G:GRAPH;E:GRAPH_EDGE;i:GRAPH_EDGE_ITERATOR):integer;

Jos i osoittaa johonkin, läpikäynti on vielä kesken. Palautetaan silloin true (1), muuten false(0).

Aikavaativuus : O(1)

GRAPH_ASSIGN_EDGE_COLOR(G,E,col)

void GRAPH_ASSIGN_EDGE_COLOR(GRAPH G, GRAPH_EDGE E, GRAPH_COLORTYPE col)

procedure GRAPH_ASSIGN_EDGE_COLOR(G:GRAPH;E:GRAPH_EDGE;col;GRAPH_COLORTYPE);

Määrittelee kaaren E värin (col).

Aikavaativuus on O(1).

GRAPH_ASSIGN_EDGE_COST(G,E,cst)

void GRAPH_ASSIGN_EDGE_COST(GRAPH G, GRAPH_EDGE E, GRAPH_COSTTYPE cst)

procedure GRAPH_ASSIGN_EDGE_COST(G:GRAPH;E:GRAPH_EDGE;cst:G_COSTTYPE);

Määrittelee kaaren E painon (cst).

Aikavaativuus on O(1).

GRAPH_ASSIGN_EDGE_LABEL(G,E,lbl)

void GRAPH_ASSIGN_EDGE_LABEL(GRAPH G, GRAPH_EDGE E, GRAPH_LABELTYPE lbl)

procedure GRAPH_ASSIGN_EDGE_LABEL(G:GRAPH;E:GRAPH_EDGE;lbl:G_LABELTYPE);

Määrittelee kaaren E nimen (lbl).

Aikavaativuus on O(1).