spo/ass1/bonus/dijkstra.lst
2025-12-18 13:49:58 +01:00

186 lines
9.1 KiB
Text

00000 dijk START 0
. zacetna inicializacija, d=0
00000 010000 LDA #0
00003 0721BD LDX ZAC
00006 0FA184 STA D,X
00009 0FA19C STA PROV,X
. neskoncna while zanka
0000C 6F2178 WHILE LDS minus_ena . S = -1, hrani vozlisce ki imam min razdaljo v okolici
0000F 050000 LDX #0 . stevec = 0
00012 AC10 FOR1 RMO X,A
00014 0F216A STA old_X . shrani vrednost X-a
00017 03A18E LDA PROV,X . nalozi potencialno razdaljo sosednjega vozlisca v okolici
0001A 2B216A COMP minus_ena
0001D 332025 JEQ NEXT . ce ze obiskano=-2 ali neobiskano=-1 preskoci vozlisce
00020 2B2167 COMP minus_dva
00023 33201F JEQ NEXT
00026 AC40 RMO S,A . sicer S v A
00028 2B215C COMP minus_ena . ce S se ni nastavljen ga nastavi prvic
0002B 332015 JEQ SET . sicer poglej ali ima trenutno vozl. manjso pot. razdaljo prov[X] < prov[S]
0002E 03A177 LDA PROV,X . nalozi p. razdaljo tren. vozl.
00031 AC05 RMO A,T . shrani jo v T reg.
00033 AC41 RMO S,X . premakni trenutni ix min. vozl. v X za ix naslavljanje
00035 03A170 LDA PROV,X . nalozi trenutno min razdaljo
00038 072146 LDX old_X . obnovi X, vrednost stevca zanke FOR1
0003B A050 COMPR T,A . primerjaj vrednosti tj. ce razdalja ni krajsa preskoci, sicer SET
0003D 332005 JEQ NEXT
00040 372002 JGT NEXT
00043 AC14 SET RMO X,S . S nastavi na ix vozlisca - trenutna iteracija
00045 AC10 NEXT RMO X,A
00047 190003 ADD #3
0004A AC01 RMO A,X
0004C 29001B COMP #table_len
0004F 3B2FC0 JLT FOR1
. ce ni vec vozlisc v okolici koncaj
00052 AC40 RMO S,A
00054 2B2130 COMP minus_ena
00057 33208E JEQ HALT
. sicer p. razdaljo shrani kot dejansko in oznaci vozlisce kot obiskano
0005A AC41 RMO S,X
0005C 03A149 LDA PROV,X
0005F 0FA12B STA D,X
00062 032125 LDA minus_dva
00065 0FA140 STA PROV,X
. nato dodaj vozlisca v okolico oz. posodobi razdalje obstojecih vozlisc v okolici
00068 050000 LDX #0 . stevec na 0
0006B AC10 FOR2 RMO X,A
0006D 0F2111 STA old_X
00070 03A07E LDA INPUT_X,X . preveri ali je to povezava ki izvira v vozl. S
00073 210003 MUL #3 . pomnozi s 3 da lahko primerjamo s S, ki steje ix WORDa
00076 A004 COMPR A,S
00078 37205D JGT NEXT2 . ce ni preskoci
0007B 3B205A JLT NEXT2
. sicer preveri ali je sosednje vozlisce ze obiskano
0007E 03A0A0 LDA INPUT_Y,X . nalozi ix soseda
00081 210003 MUL #3
00084 AC01 RMO A,X . premakni v X
00086 03A11F LDA PROV,X . nalozi sosedovo potencialno razdaljo
00089 0720F5 LDX old_X . obnovi X
0008C 2B20FB COMP minus_dva . poglej ce je ze obiskan
0008F 332046 JEQ NEXT2
00092 2B20F2 COMP minus_ena . ce se ni obiskan, nastavi vrednost p. razdalje
00095 332023 JEQ SET2
. sicer preveri da je nova p. razdalja manjsa od trenutne
. D[S] + w < PROV[Y]
00098 AC41 RMO S,X
0009A 03A0F0 LDA D,X
0009D 0720E1 LDX old_X
000A0 1BA0AE ADD INPUT_W,X
000A3 AC05 RMO A,T
000A5 03A079 LDA INPUT_Y,X
000A8 210003 MUL #3
000AB AC01 RMO A,X
000AD 03A0F8 LDA PROV,X
000B0 0720CE LDX old_X
000B3 A005 COMPR A,T
000B5 332020 JEQ NEXT2
000B8 3B201D JLT NEXT2
000BB AC41 SET2 RMO S,X
000BD 03A0CD LDA D,X
000C0 0720BE LDX old_X
000C3 1BA08B ADD INPUT_W,X
000C6 AC05 RMO A,T
000C8 03A056 LDA INPUT_Y,X
000CB 210003 MUL #3
000CE AC01 RMO A,X
000D0 AC50 RMO T,A
000D2 0FA0D3 STA PROV,X
000D5 0720A9 LDX old_X
000D8 AC10 NEXT2 RMO X,A
000DA 190003 ADD #3
000DD AC01 RMO A,X
000DF 290030 COMP #table_len2
000E2 3B2F86 JLT FOR2
000E5 3F2F24 J WHILE
000E8 3F2FFD HALT J HALT
000EB END dijk
. vhodni parametri
000EB 000009 INPUT_V WORD 9
000EE 000010 INPUT_E WORD 16
000F1 000000 INPUT_X WORD 0
000F4 000000 WORD 0
000F7 000001 WORD 1
000FA 000001 WORD 1
000FD 000002 WORD 2
00100 000002 WORD 2
00103 000003 WORD 3
00106 000003 WORD 3
00109 000003 WORD 3
0010C 000003 WORD 3
0010F 000003 WORD 3
00112 000004 WORD 4
00115 000004 WORD 4
00118 000005 WORD 5
0011B 000006 WORD 6
0011E 000007 WORD 7
00121 000001 INPUT_Y WORD 1
00124 000002 WORD 2
00127 000002 WORD 2
0012A 000003 WORD 3
0012D 000006 WORD 6
00130 000003 WORD 3
00133 000006 WORD 6
00136 000008 WORD 8
00139 000007 WORD 7
0013C 000005 WORD 5
0013F 000004 WORD 4
00142 000001 WORD 1
00145 000005 WORD 5
00148 000007 WORD 7
0014B 000008 WORD 8
0014E 000008 WORD 8
00151 000008 INPUT_W WORD 8
00154 00000C WORD 12
00157 00000D WORD 13
0015A 000019 WORD 25
0015D 000015 WORD 21
00160 00000E WORD 14
00163 00000C WORD 12
00166 000010 WORD 16
00169 00000C WORD 12
0016C 000008 WORD 8
0016F 000014 WORD 20
00172 000009 WORD 9
00175 000013 WORD 19
00178 00000B WORD 11
0017B 00000B WORD 11
0017E 000009 WORD 9
00181 last EQU *
. pomozne spremenljivke
00181 000000 old_X RESW 1
00184 000000 old_S RESW 1
00187 FFFFFF minus_ena WORD X'FFFFFF'
0018A FFFFFE minus_dva WORD X'FFFFFE'
. najkrajse razdalje
0018D FFFFFF D WORD -1
00190 FFFFFF WORD -1
00193 FFFFFF WORD -1
00196 FFFFFF WORD -1
00199 FFFFFF WORD -1
0019C FFFFFF WORD -1
0019F FFFFFF WORD -1
001A2 FFFFFF WORD -1
001A5 FFFFFF WORD -1
. provisional razdalje (okolica), -2 = done, -1 neobiskan
001A8 FFFFFF PROV WORD -1
001AB FFFFFF WORD -1
001AE FFFFFF WORD -1
001B1 FFFFFF WORD -1
001B4 FFFFFF WORD -1
001B7 FFFFFF WORD -1
001BA FFFFFF WORD -1
001BD FFFFFF WORD -1
001C0 FFFFFF WORD -1
001C3 last_in EQU *
001C3 table_len EQU last_in-PROV
001C3 table_len2 EQU last-INPUT_W
. indeks zacetnega vozlisca * 3
001C3 000000 ZAC WORD 0