diff --git a/ass1/bonus/dijkstra.asm b/ass1/bonus/dijkstra.asm index f55cad6..eac441b 100644 --- a/ass1/bonus/dijkstra.asm +++ b/ass1/bonus/dijkstra.asm @@ -1,47 +1,56 @@ DIJKSTRA START 0 - .zacetna inicializacija + .zacetna inicializacija, d=0 LDA #0 STA RAZDALJE, START STA PROV, START + .zacetno vozlisce nima predhodnika LDA #-1 STA PREV, START -WHILE LDS #-1 - LDX #0 -FOR1 LDA PROV, X - CMP #0 - JLT NEXT - RMO S, A + .neskoncna while zanka +WHILE LDS #-1 . S = -1, hrani vozlisce ki imam min razdaljo v okolici + LDX #0 . stevec = 0 +FOR1 LDA PROV, X . nalozi potencialno razdaljo sosednjega vozlisca v okolici CMP #-1 - JEQ SET - STA old_X - LDA PROV, X - RMO A, T - RMO S, X - LDA PROV, X - LDX old_X - COMPR A, T . A-> PROV[Y] T -> PROV[X] - JGT NEXT + JEQ NEXT . ce ze obiskano=-2 ali neobiskano=-1 preskoci vozlisce + CMP #-2 JEQ NEXT -SET RMO X, S + RMO S, A . sicer S v A + CMP #-1 . ce S se ni nastavljen ga nastavi prvic + JEQ SET + STA old_X . sicer poglej ali ima trenutno vozl. manjso pot. razdaljo prov[X] < prov[S] + LDA PROV, X . nalozi p. razdaljo tren. vozl. + RMO A, T . shrani jo v T reg. + RMO S, X . premakni trenutni ix min. vozl. v X za ix naslavljanje + LDA PROV, X . nalozi trenutno min razdaljo + LDX old_X . obnovi X, vrednost stevca zanke FOR1 + COMPR A, T . primerjaj vrednosti tj. ce razdalja ni krajsa preskoci, sicer SET + JEQ NEXT + JGT NEXT +SET RMO X, S . S nastavi na ix vozlisca - trenutna iteracija +NEXT CLEAR T + TIX INPUT_V + J FOR1 + . ce ni vec vozlisc v okolici koncaj RMO S, A - COMP #-1 + CMP #-1 JEQ HALT - + .sicer p. razdaljo shrani kot dejansko in oznaci vozlisce kot obiskano RMO S, X - LDA PROV, X STA D, X LDA #-2 STA PROV, X - - LDX #0 -FOR2 - - TIX INPUT_E - JLT FOR2 + .nato dodaj vozlisca v okolico oz. posodobi razdalje obstojecih vozlisc v okolici + LDX #0 +FOR2 LDA INPUT_X, X + COMPR A, S + JGT NEXT2 + JLT NEXT2 -NEXT TIX INPUT_V - J FOR1 + +NEXT2 TIX INPUT_V + J FOR2 + . J ZA WHILE?! HALT J HALT END DIJKSTRA