Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. template<RichtType RT>
  2. void EulerCircuit<RT>::zoekEulerPad(){
  3.     // gelinkte lijst die het uiteindelijke pad zal bijhouden;
  4.     EulerKnoop * lijst = 0;
  5.     // we blijven cirkels/loops zoeken in de graaf tot alle verbindingen zijn op gebruikt
  6.     while(graaf.aantalVerbindingen() > 0)
  7.     {
  8.         /* stap 1: random start knoop kiezen (voor makkelijkheid de eerste) */
  9.         int van = 0;
  10.         int naar = -1;
  11.         // zolang de knoop geen verbindingen meer heeft, volgende knoop nemen
  12.         while(graaf[van].empty())
  13.             van++;
  14.         int startVan = van;
  15.        
  16.         // de plaats zoeken waar we moetne tussenvoegen
  17.         EulerKnoop * huidigeKnoop = lijst;
  18.         EulerKnoop * volgende = 0;
  19.         if(huidigeKnoop != 0){
  20.             while (huidigeKnoop->nummer != startVan)
  21.                 huidigeKnoop = huidigeKnoop->volgende;
  22.             // de volgende knoop bijhouden         
  23.             volgende = huidigeKnoop->volgende;
  24.         }else {
  25.             huidigeKnoop = new EulerKnoop();
  26.         }
  27.     // deze loop herhalen tot we terug in onze begin knoop zitten, en de lus dus volledig is
  28.         while (startVan != naar) {
  29.             /* stap 2: verwijder een verbinding van de knoop  (voor makkelijkheid de eerste) */
  30.             naar = graaf[van].begin()->first;
  31.             graaf.verwijderVerbinding(van, naar);
  32.             /* stap 3: toevoegen van de "verbinding" aan onze lus */
  33.             huidigeKnoop->nummer = van;
  34.             huidigeKnoop->volgende = new EulerKnoop();
  35.             huidigeKnoop = huidigeKnoop->volgende;
  36.             // doorschuiven naar volgende knoop
  37.             van = naar;
  38.         }
  39.  
  40.         // de rest van lijst nu achteraan hangen aan de knoop die we laatst toegevoegd hebben
  41.         huidigeKnoop->nummer = van;
  42.         huidigeKnoop->volgende = volgende;
  43.     }
  44.  
  45.     // printen lijst
  46.     EulerKnoop * huidigeKnoop = lijst;
  47.     while (huidigeKnoop != 0){
  48.         std::cout << huidigeKnoop->nummer << " -> ";
  49.     }
  50.     std::cout << std::endl;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement