ch
This commit is contained in:
parent
4c8c1fb47e
commit
d03cb64ac0
1 changed files with 137 additions and 37 deletions
|
|
@ -1,21 +1,23 @@
|
|||
DIJKSTRA START 0
|
||||
dijk START 0
|
||||
.zacetna inicializacija, d=0
|
||||
LDA #0
|
||||
STA RAZDALJE, START
|
||||
STA PROV, START
|
||||
LDX START
|
||||
STA D, X
|
||||
STA PROV, X
|
||||
.zacetno vozlisce nima predhodnika
|
||||
LDA #-1
|
||||
STA PREV, START
|
||||
LDA minus_ena
|
||||
STA PREV, X
|
||||
.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
|
||||
|
||||
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
|
||||
CMP #-2
|
||||
COMP minus_dva
|
||||
JEQ NEXT
|
||||
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
|
||||
STA old_X . sicer poglej ali ima trenutno vozl. manjso pot. razdaljo prov[X] < prov[S]
|
||||
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
|
||||
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
|
||||
COMPR T, A . 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 TIX INPUT_V
|
||||
J FOR1
|
||||
NEXT RMO X, A
|
||||
COMP table_len
|
||||
ADD #3
|
||||
RMO A, X
|
||||
JLT FOR1
|
||||
|
||||
. ce ni vec vozlisc v okolici koncaj
|
||||
RMO S, A
|
||||
CMP #-1
|
||||
COMP minus_ena
|
||||
JEQ HALT
|
||||
.sicer p. razdaljo shrani kot dejansko in oznaci vozlisce kot obiskano
|
||||
RMO S, X
|
||||
LDA PROV, X
|
||||
STA D, X
|
||||
LDA #-2
|
||||
LDA minus_dva
|
||||
STA PROV, X
|
||||
|
||||
.nato dodaj vozlisca v okolico oz. posodobi razdalje obstojecih vozlisc v okolici
|
||||
LDX #0 . stevec na 0
|
||||
FOR2 LDA INPUT_X, X . preveri ali je to povezava ki izvira v vozl. S
|
||||
COMPR A, S
|
||||
JGT NEXT2 . ce ni preskoci
|
||||
JLT NEXT2
|
||||
.sicer preveri ali je vozlisce neobiskano
|
||||
.sicer preveri ali je vozlisce ze obiskano
|
||||
LDA PROV, X
|
||||
CMP #-1
|
||||
JGT NEXT2
|
||||
JLT NEXT2
|
||||
COMP minus_dva
|
||||
JEQ NEXT2
|
||||
COMP minus_ena .se se ni obiskano, nastavi vrednost p. razdalje
|
||||
JEQ SET2
|
||||
|
||||
RMO X, A
|
||||
STA old_X . zacasno zamenjaj vrednost X
|
||||
LDX INPUT_Y, X
|
||||
LDA D, X .nalozi D[Y] v A
|
||||
RMO A, T .zacasno shrani v T
|
||||
RMO S, X
|
||||
LDA D, X . D[S] -> A
|
||||
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
|
||||
ADDR T, A
|
||||
STA prov, X . prov[Y] = D[S] + W
|
||||
RMO A, X
|
||||
STA PROV, X
|
||||
RMO X, A
|
||||
STA PREV, X
|
||||
NEXT2 RMO A, X
|
||||
COMP table_len
|
||||
ADD #3
|
||||
JLT FOR2
|
||||
|
||||
|
||||
NEXT2 TIX INPUT_V
|
||||
J FOR2
|
||||
. J ZA WHILE?!
|
||||
J WHILE
|
||||
|
||||
HALT J HALT
|
||||
END DIJKSTRA
|
||||
END dijk
|
||||
|
||||
|
||||
.vhodni parametri
|
||||
INPUT_V = 9
|
||||
INPUT_E = 16
|
||||
INPUT_X RESW 100
|
||||
INPUT_Y RESW 100
|
||||
INPUT_W RESW 100
|
||||
INPUT_V WORD 9
|
||||
INPUT_E WORD 16
|
||||
INPUT_X WORD 0
|
||||
WORD 0
|
||||
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
|
||||
old_X RESW 1
|
||||
minus_ena WORD X'FFFFFF'
|
||||
minus_dva WORD X'FFFFFE'
|
||||
.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
|
||||
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
|
||||
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
|
||||
START WORD 0
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue