Tämän viikon tehtävät käsittelevät suunnattuja verkkoja. Edellisen viikon hyppytaulukon lisäksi teemana ovat suunnatut syklit.
Topologinen järjestys
Topologinen järjestys on verkon solmujen järjestys, jossa solmu a on ennen solmua b, jos solmusta a pääsee solmuun b. Esimerkiksi verkon
Järjestyksen muodostaminen
Topologisen järjestyksen voi muodostaa syvyyshaun avulla. Ideana on käydä läpi verkon solmut ja aloittaa syvyyshaku jokaisesta solmusta, jota ei ole vielä käsitelty. Haun aikana solmuilla on kolme mahdollista väriä 0–2. Aluksi jokaisen solmun väri on 0.
Seuraava pseudokoodi esittää haun toiminnan:
function dfs(s) if color[s] == 1 fail() if color[s] == 2 return color[s] = 1 for u in adj[s] dfs(u) color[s] = 2
Kun haku saapuu uuteen solmuun, se merkitsee solmun väriksi 1. Sitten kun se on käsitellyt kaikki solmusta lähtevät kaaret, se merkitsee solmun väriksi 2.
Jos haku tulee toista kautta solmuun, jonka värinä on 1, verkossa on negatiivinen sykli eikä topologista järjestystä voi muodostaa. Muuten yksi topologinen järjestys on käänteinen järjestys, jossa solmujen väriksi tuli 2.
Esimerkissämme haku voisi alkaa näin solmusta 1: