This commit is contained in:
aljazbrodar. 2025-11-15 09:28:08 +01:00
parent 4c8c1fb47e
commit d03cb64ac0

View file

@ -1,21 +1,23 @@
DIJKSTRA START 0 dijk START 0
.zacetna inicializacija, d=0 .zacetna inicializacija, d=0
LDA #0 LDA #0
STA RAZDALJE, START LDX START
STA PROV, START STA D, X
STA PROV, X
.zacetno vozlisce nima predhodnika .zacetno vozlisce nima predhodnika
LDA #-1 LDA minus_ena
STA PREV, START STA PREV, X
.neskoncna while zanka .neskoncna while zanka
WHILE LDS #-1 . S = -1, hrani vozlisce ki imam min razdaljo v okolici WHILE LDS minus_ena . S = -1, hrani vozlisce ki imam min razdaljo v okolici
LDX #0 . stevec = 0 LDX #0 . stevec = 0
FOR1 LDA PROV, X . nalozi potencialno razdaljo sosednjega vozlisca v okolici FOR1 LDA PROV, X . nalozi potencialno razdaljo sosednjega vozlisca v okolici
CMP #-1 COMP minus_ena
JEQ NEXT . ce ze obiskano=-2 ali neobiskano=-1 preskoci vozlisce JEQ NEXT . ce ze obiskano=-2 ali neobiskano=-1 preskoci vozlisce
CMP #-2 COMP minus_dva
JEQ NEXT JEQ NEXT
RMO S, A . sicer S v A RMO S, A . sicer S v A
CMP #-1 . ce S se ni nastavljen ga nastavi prvic COMP minus_ena . ce S se ni nastavljen ga nastavi prvic
JEQ SET JEQ SET
STA old_X . sicer poglej ali ima trenutno vozl. manjso pot. razdaljo prov[X] < prov[S] STA old_X . sicer poglej ali ima trenutno vozl. manjso pot. razdaljo prov[X] < prov[S]
LDA PROV, X . nalozi p. razdaljo tren. vozl. LDA PROV, X . nalozi p. razdaljo tren. vozl.
@ -23,64 +25,162 @@ FOR1 LDA PROV, X . nalozi potencialno razdaljo sosednjega vozlisca v okol
RMO S, X . premakni trenutni ix min. vozl. v X za ix naslavljanje RMO S, X . premakni trenutni ix min. vozl. v X za ix naslavljanje
LDA PROV, X . nalozi trenutno min razdaljo LDA PROV, X . nalozi trenutno min razdaljo
LDX old_X . obnovi X, vrednost stevca zanke FOR1 LDX old_X . obnovi X, vrednost stevca zanke FOR1
COMPR A, T . primerjaj vrednosti tj. ce razdalja ni krajsa preskoci, sicer SET COMPR T, A . primerjaj vrednosti tj. ce razdalja ni krajsa preskoci, sicer SET
JEQ NEXT JEQ NEXT
JGT NEXT JGT NEXT
SET RMO X, S . S nastavi na ix vozlisca - trenutna iteracija SET RMO X, S . S nastavi na ix vozlisca - trenutna iteracija
NEXT RMO X, A
NEXT TIX INPUT_V COMP table_len
J FOR1 ADD #3
RMO A, X
JLT FOR1
. ce ni vec vozlisc v okolici koncaj . ce ni vec vozlisc v okolici koncaj
RMO S, A RMO S, A
CMP #-1 COMP minus_ena
JEQ HALT JEQ HALT
.sicer p. razdaljo shrani kot dejansko in oznaci vozlisce kot obiskano .sicer p. razdaljo shrani kot dejansko in oznaci vozlisce kot obiskano
RMO S, X RMO S, X
LDA PROV, X
STA D, X STA D, X
LDA #-2 LDA minus_dva
STA PROV, X STA PROV, X
.nato dodaj vozlisca v okolico oz. posodobi razdalje obstojecih vozlisc v okolici .nato dodaj vozlisca v okolico oz. posodobi razdalje obstojecih vozlisc v okolici
LDX #0 . stevec na 0 LDX #0 . stevec na 0
FOR2 LDA INPUT_X, X . preveri ali je to povezava ki izvira v vozl. S FOR2 LDA INPUT_X, X . preveri ali je to povezava ki izvira v vozl. S
COMPR A, S COMPR A, S
JGT NEXT2 . ce ni preskoci JGT NEXT2 . ce ni preskoci
JLT NEXT2 JLT NEXT2
.sicer preveri ali je vozlisce neobiskano .sicer preveri ali je vozlisce ze obiskano
LDA PROV, X LDA PROV, X
CMP #-1 COMP minus_dva
JGT NEXT2 JEQ NEXT2
JLT NEXT2 COMP minus_ena .se se ni obiskano, nastavi vrednost p. razdalje
JEQ SET2
RMO X, A
STA old_X . zacasno zamenjaj vrednost X STA old_X . zacasno zamenjaj vrednost X
LDX INPUT_Y, X RMO S, X
LDA D, X .nalozi D[Y] v A LDA D, X . D[S] -> A
RMO A, T .zacasno shrani v T RMO A, T . zacasno shrani v T
LDX old_X
LDA INPUT_W, X
ADDR T, A . D[S] + w
RMO A, T . zacasno shrani v T
LDA PROV, X
COMPR A, T
JEQ NEXT2
JGT NEXT2
SET2 RMO X, A
STA old_X
RMO S, X
LDA D, X
RMO A, T
LDX old_X
LDA INPUT_W, X LDA INPUT_W, X
ADDR T, A ADDR T, A
STA prov, X . prov[Y] = D[S] + W STA PROV, X
RMO A, X RMO X, A
STA PREV, X
NEXT2 RMO A, X
COMP table_len
ADD #3
JLT FOR2
J WHILE
NEXT2 TIX INPUT_V
J FOR2
. J ZA WHILE?!
HALT J HALT HALT J HALT
END DIJKSTRA END dijk
.vhodni parametri .vhodni parametri
INPUT_V = 9 INPUT_V WORD 9
INPUT_E = 16 INPUT_E WORD 16
INPUT_X RESW 100 INPUT_X WORD 0
INPUT_Y RESW 100 WORD 0
INPUT_W RESW 100 WORD 1
WORD 1
WORD 2
WORD 2
WORD 3
WORD 3
WORD 3
WORD 3
WORD 3
WORD 4
WORD 4
WORD 5
WORD 6
WORD 7
INPUT_Y WORD 1
WORD 2
WORD 2
WORD 3
WORD 6
WORD 3
WORD 6
WORD 8
WORD 7
WORD 5
WORD 4
WORD 1
WORD 5
WORD 7
WORD 8
WORD 8
INPUT_W WORD 8
WORD 12
WORD 13
WORD 25
WORD 21
WORD 14
WORD 12
WORD 16
WORD 12
WORD 8
WORD 20
WORD 9
WORD 19
WORD 11
WORD 11
WORD 9
.pomozne spremenljivke .pomozne spremenljivke
old_X RESW 1 old_X RESW 1
minus_ena WORD X'FFFFFF'
minus_dva WORD X'FFFFFE'
.najkrajse razdalje .najkrajse razdalje
D RESW 9 D WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
.prejsnje vozlisce .prejsnje vozlisce
PREV RESW 9 PREV WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
.provisional razdalje (okolica), -2 = done, -1 neobiskan .provisional razdalje (okolica), -2 = done, -1 neobiskan
PROV RESW 9 PROV WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
WORD -1
last_in EQU *
table_len EQU last_in - PROV
.indeks zacetnega vozlisca .indeks zacetnega vozlisca
START WORD 0 START WORD 0