Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<RichtType RT>
- void EulerCircuit<RT>::zoekEulerPad(){
- // gelinkte lijst die het uiteindelijke pad zal bijhouden;
- EulerKnoop * lijst = 0;
- // we blijven cirkels/loops zoeken in de graaf tot alle verbindingen zijn op gebruikt
- while(graaf.aantalVerbindingen() > 0)
- {
- /* stap 1: random start knoop kiezen (voor makkelijkheid de eerste) */
- int van = 0;
- int naar = -1;
- // zolang de knoop geen verbindingen meer heeft, volgende knoop nemen
- while(graaf[van].empty())
- van++;
- int startVan = van;
- // de plaats zoeken waar we moetne tussenvoegen
- EulerKnoop * huidigeKnoop = lijst;
- EulerKnoop * volgende = 0;
- if(huidigeKnoop != 0){
- while (huidigeKnoop->nummer != startVan)
- huidigeKnoop = huidigeKnoop->volgende;
- // de volgende knoop bijhouden
- volgende = huidigeKnoop->volgende;
- }else {
- huidigeKnoop = new EulerKnoop();
- }
- // deze loop herhalen tot we terug in onze begin knoop zitten, en de lus dus volledig is
- while (startVan != naar) {
- /* stap 2: verwijder een verbinding van de knoop (voor makkelijkheid de eerste) */
- naar = graaf[van].begin()->first;
- graaf.verwijderVerbinding(van, naar);
- /* stap 3: toevoegen van de "verbinding" aan onze lus */
- huidigeKnoop->nummer = van;
- huidigeKnoop->volgende = new EulerKnoop();
- huidigeKnoop = huidigeKnoop->volgende;
- // doorschuiven naar volgende knoop
- van = naar;
- }
- // de rest van lijst nu achteraan hangen aan de knoop die we laatst toegevoegd hebben
- huidigeKnoop->nummer = van;
- huidigeKnoop->volgende = volgende;
- }
- // printen lijst
- EulerKnoop * huidigeKnoop = lijst;
- while (huidigeKnoop != 0){
- std::cout << huidigeKnoop->nummer << " -> ";
- }
- std::cout << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement