100 NV=0: REM NUMBER OF VERTICES 110 READ N$:IF N$<>"" THEN NV=NV+1:GOTO 110 120 NE=0: REM NUMBER OF EDGES 130 READ N1:IF N1 >= 0 THEN READ N2,W:NE=NE+1:GOTO 130 140 DIM VN$(NV-1),VD(NV-1,2): REM VERTEX NAMES AND DATA 150 DIM ED(NE-1,2): REM EDGE DATA 160 RESTORE 170 FOR I=0 TO NV-1 180 : READ VN$(I): REM VERTEX NAME 190 : VD(I,0) = -1: REM DISTANCE = INFINITY 200 : VD(I,1) = 0: REM NOT YET VISITED 210 : VD(I,2) = -1: REM NO PREV VERTEX YET 220 NEXT I 230 READ N$: REM SKIP SENTINEL 240 FOR I=0 TO NE-1 250 : READ ED(I,0),ED(I,1),ED(I,2): REM EDGE FROM, TO, WEIGHT 260 NEXT I 270 READ N1: REM SKIP SENTINEL 280 READ O: REM ORIGIN VERTEX 290 : 300 REM BEGIN DIJKSTRA'S 310 VD(O,0) = 0: REM DISTANCE TO ORIGIN IS 0 320 CV = 0: REM CURRENT VERTEX IS ORIGIN 330 FOR I=0 TO NE-1 340 : IF ED(I,0)<>CV THEN 390: REM SKIP EDGES NOT FROM CURRENT 350 : N=ED(I,1): REM NEIGHBOR VERTEX 360 : D=VD(CV,0) + ED(I,2): REM TOTAL DISTANCE TO NEIGHBOR THROUGH THIS PATH 370 : REM IF PATH THRU CV < DISTANCE, UPDATE DISTANCE AND PREV VERTEX 380 : IF (VD(N,0)=-1) OR (D -1 THEN MD=VD(MV,0) 460 : IF ( VD(I,0)<>-1 ) AND ( ( MD=-1 ) OR ( VD(I,0)O THEN PRINT "←";:N=VD(N,2):GOTO 570 590 : PRINT ")" 600 NEXT I 610 DATA A,B,C,D,E,F,"" 620 DATA 0,1,7 630 DATA 0,2,9 640 DATA 0,5,14 650 DATA 1,2,10 660 DATA 1,3,15 670 DATA 2,3,11 680 DATA 2,5,2 690 DATA 3,4,6 700 DATA 4,5,9 710 DATA -1 720 DATA 0