|
左上がA地点、右下がB地点とする。
交差点の形状
0 1 2 3
× │ × │
×・ ×・ ─・ ─・
として、
各交差点での経路のマップをつくる。
例
A─・─・
│ │ │
・ ・─・
│ │ │
・─・─B
の場合、
0,2,2
1,1,3
1,3,3
となる。
交差点の個数は、縦3個、横3個となる。
DATA 8,5 !縦横の大きさ(交差点の数)
DATA 0,2,2,0,0 !マップ
DATA 1,3,3,2,0
DATA 1,3,3,3,2
DATA 0,1,3,3,3
DATA 0,0,1,3,3
DATA 0,0,0,1,3
DATA 0,0,0,0,1
DATA 0,0,0,0,1
READ M,N !縦横
SET WINDOW -1,MAX(M,N),-1,MAX(M,N)
DRAW grid
DIM P(0 TO N-1) !点(x,y)を通過する場合の数
MAT P=ZER
FOR Y=M-1 TO 0 STEP -1 !左上から右下へ
FOR X=0 TO N-1
READ R !交差点の形状
SELECT CASE R
CASE 0
IF X=0 AND Y=M-1 THEN !始点Aなら
LET P(X)=1
ELSE
LET P(X)=0
END IF
CASE 1
PLOT LINES: X,Y+1; X,Y
CASE 2
LET P(X)=P(X-1)
PLOT LINES: X-1,Y; X,Y
CASE 3
IF X=0 THEN !左端
IF Y=M-1 THEN LET P(X)=1 !始点Aとつながっている
ELSE
LET P(X)=P(X)+P(X-1) !累計 ※パスカルの三角形
END IF
PLOT LINES: X,Y+1; X,Y !縦の経路
PLOT LINES: X-1,Y; X,Y !横の経路
END SELECT
IF P(X)>0 OR R>0 THEN
DRAW disk WITH SCALE(0.1)*SHIFT(X,Y)
PLOT TEXT ,AT X+0.1,Y+0.1: STR$(P(X))
END IF
NEXT X
NEXT Y
PRINT P(N-1);"通り"
END
DATA 5,6 !例1
DATA 0,2,2,2,0,0
DATA 1,3,3,3,0,0
DATA 1,3,3,3,2,2
DATA 1,3,3,3,3,3
DATA 0,0,1,3,3,3
DATA 5,6 !例2
DATA 0,2,2,2,2,2
DATA 1,3,3,3,3,3
DATA 1,3,0,0,1,3
DATA 1,3,2,2,3,3
DATA 1,3,3,3,3,3
DATA 5,5 !例3
DATA 0,2,0,0,0
DATA 1,3,2,0,0
DATA 1,3,3,2,0
DATA 1,3,3,3,2
DATA 1,3,3,3,3
|
|