!Anand Oza
!March 26, 2006
!Contest #4 - PATHWAYS
!Takoma Park Middle School
!Intermediate Division
DIM grid(1,1)
DIM nodes(0,2)
LINE INPUT PROMPT "Enter the coordinates of the
nodes--->" : nodeinput$
DO
LET rc$ =
""
LET cc$ =
""
DO WHILE nodeinput$[1:1]
<> ","
LET rc$ = rc$
& nodeinput$[1:1]
LET nodeinput$
= nodeinput$[2:LEN(nodeinput$)]
LOOP
LET nodeinput$ =
nodeinput$[2:LEN(nodeinput$)]
DO WHILE
nodeinput$[1:1] <> ","
LET cc$ = cc$
& nodeinput$[1:1]
LET nodeinput$
= nodeinput$[2:LEN(nodeinput$)]
LOOP
LET nodeinput$ =
nodeinput$[2:LEN(nodeinput$)]
LET node=node+1
LET r = VAL(rc$)
LET c = VAL(cc$)
IF r >
SIZE(grid,1) THEN MAT redim grid(r,SIZE(grid,2))
IF c >
SIZE(grid,2) THEN MAT redim grid(SIZE(grid,1),c)
MAT REDIM
nodes(node,2)
LET nodes(node,1)
= r
LET nodes(node,2)
= c
LOOP UNTIL nodeinput$[1:1]="0"
FOR X = 1 TO node
LET
grid(nodes(X,1),nodes(X,2)) = X
NEXT X
FOR X = 1 TO SIZE(grid,1)
FOR Y = 1 TO
SIZE(grid,2)
IF
grid(x,y)>0 THEN PRINT "X "; ELSE PRINT "- ";
NEXT Y
PRINT
NEXT X
DIM edges$(1)
MAT REDIM edges$(node)
FOR X = 1 TO node
IF nodes(X,1)
<> 1 THEN
IF
grid(nodes(X,1)-1,nodes(X,2)) > 0 THEN LET edges$(X)=edges$(X) &
STR$(grid(nodes(X,1)-1,nodes(X,2))) & ","
END IF
IF nodes(X,1)
<> SIZE(grid,1) THEN
IF
grid(nodes(X,1)+1,nodes(X,2)) > 0 THEN LET edges$(X)=edges$(X) &
STR$(grid(nodes(X,1)+1,nodes(X,2))) & ","
END IF
IF nodes(X,2)
<> 1 THEN
IF
grid(nodes(X,1),nodes(X,2)-1) > 0 THEN LET edges$(X)=edges$(X) &
STR$(grid(nodes(X,1),nodes(X,2)-1)) & ","
END IF
IF nodes(X,2)
<> SIZE(grid,2) THEN
IF
grid(nodes(X,1),nodes(X,2)+1) > 0 THEN LET edges$(X)=edges$(X) &
STR$(grid(nodes(X,1),nodes(X,2)+1)) & ","
END IF
NEXT X
DIM path(1)
MAT REDIM path(node)
FOR program = 2 TO 5
PRINT
INPUT prompt
"Enter the starting node--->" : r1,c1
INPUT prompt
"Enter the ending node----->" : r2,c2
LET
start=grid(r1,c1)
LET
end=grid(r2,c2)
PUBLIC totalpaths
LET totalpaths=0
DECLARE FUNCTION
CheckPath
IF
CheckPath(path(),edges$(),start,1,end) = 1 THEN
LET
totalpaths=totalpaths+1
END IF
IF totalpaths=0
THEN
PRINT
"NONE - There are no paths from (";r1;",";c1;") to
(";r2;",";c2;")"
ELSE
PRINT
totalpaths;"- There are";totalpaths;"paths from
(";r1;",";c1;") to
(";r2;",";c2;")"
END IF
PRINT
NEXT program
END
FUNCTION CheckPath(path(),edges$(),chosen,nextstep,end)
DECLARE PUBLIC
totalpaths
DIM choices(0)
LET
path(nextstep) = chosen
LET commachoices$
= edges$(path(nextstep))
DO WHILE
LEN(commachoices$)>0
IF
commachoices$[1:1] <> "," THEN
LET
next$=next$ & commachoices$[1:1]
ELSE
MAT REDIM
choices(SIZE(choices)+1)
LET
choices(SIZE(choices))=VAL(next$)
LET next$ =
""
END IF
LET
commachoices$ = commachoices$[2:LEN(commachoices$)]
LOOP
FOR X = 1 TO
SIZE(choices)
LET usedup =
0
FOR Y = 1 TO
SIZE(path)
IF
path(y)=choices(x) THEN
LET
usedup = 1
END IF
NEXT Y
IF usedup
<> 1 THEN
IF
choices(x)=end THEN
LET
CheckPath=1
ELSE IF
CheckPath(path(),edges$(),choices(x),nextstep+1,end) = 1 THEN
LET
totalpaths = totalpaths + 1
END IF
END IF
NEXT X
END FUNCTION