!Takoma Park M.S.
!ACSL Jr. div
!Joel Muskin-Pieret
!
DO
LINE INPUT prompt
"node list: ":nodes$
LET length = len(nodes$)
LET a =
(length-3)/4
DIM x(100)
DIM y(100)
IF
not(val(nodes$[length:length]) = 0 and val(nodes$[length-2:length-2]) = 0) then
PRINT "Node
list invalid (does not end with 0,0)"
END IF
LOOP until val(nodes$[length:length]) = 0 and
val(nodes$[length-2:length-2]) = 0
FOR b = 1 to a
LET x(b) =
val(nodes$[4*b -3:4*b -3])
LET y(b) =
val(nodes$[4*b -1:4*b -1])
NEXT b
LET c = 0
LET d = 0
FOR b = 1 to a
IF x(b) > c
then LET c = x(b)
IF y(b) > d
then LET d = y(b)
NEXT b
DIM graph(30,30)
DIM visited(30,30)
FOR f = 1 to 30
FOR g = 1 to 30
LET
graph(f,g) = 0
LET
visited(f,g) = 0
NEXT g
NEXT f
FOR b = 1 to a
LET
graph(x(b),y(b)) = 1
LET
visited(x(b),y(b)) = 1
NEXT b
DIM listx(100)
DIM listy(100)
DO
INPUT prompt
"start and end points (0,0,0,0 to end): ": sx, sy, ex, ey
IF sx > 0 and
sy > 0 and ex > 0 and ey > 0 then
LET listx(1)=sx
LET listy(1)=sy
LET c = 1
LET finish = 0
LET output$ =
""
FOR az = 1 to
30
FOR b = 1 to 30
LET
visited(az,b) = graph(az,b)
NEXT b
NEXT az
LET
visited(sx,sy) = 2
IF sx <>
ex and sy <> ey then
DO
LET d = 0
LET e = 0
FOR az
= -1 to 1
FOR b
= -1 to 1
IF az <> 0 or b <> 0 then
IF listx(c) + az > 0 and listy(c)+b > 0 then
IF visited(listx(c) + az,listy(c)+b) = 1 and e = 0 and c > 0 then
LET c = c + 1
LET e = 1
LET listx(c) = listx(c-1) + az
LET listy(c) = listy(c-1) +
b
LET visited(listx(c-1) + az,listy(c-1)+b) = 2
ELSE
LET d = d + 1
END IF
ELSE
LET d = d + 1
END IF
END IF
NEXT
b
NEXT az
IF d = 8
and c > 0 then
LET
listx(c) = 0
LET
listy(c) = 0
LET
c = c - 1
END IF
IF c >
0 then
IF
listx(c) = ex and listy(c) = ey then
LET
finish = 1
END IF
END IF
LOOP until c
= 0 or finish = 1
END IF
IF c = 0
then
PRINT
"NONE"
ELSE IF c >
1 then
FOR b = 1 to
c-1
LET
output$ = output$ & str$(listx(b)) & ","
LET
output$ = output$ & str$(listy(b)) & ","
NEXT b
LET output$
= output$ & str$(listx(c)) & "," & str$(listy(c))
PRINT
output$
ELSE
LET output$
= output$ & str$(listx(c)) & "," & str$(listy(c))
PRINT
output$
END IF
END IF
LOOP until sx = 0 and sy = 0 and ex = 0 and ey = 0
END