主题:闯迷宫
tz_xinzhe
[专家分:200] 发布于 2007-07-17 12:21:00
各位大侠,帮帮忙.我是菜鸟,现求书上闯迷宫的解释和如何记住它.如能有效使用,必加分
!!!!!!!!!!![em10][em18]
回复列表 (共9个回复)
沙发
Matodied [专家分:7560] 发布于 2007-07-17 12:42:00
程序呢?
板凳
老大徒伤悲 [专家分:29120] 发布于 2007-07-17 13:16:00
我来说说核心部分的思路。
if not 成功 then
if 是出口 then
成功
else
if 右边是空 then
向右
elseif 下边是空 then
向下
elseif 左边是空 then
向左
elseif 上边是空 then
向上
endif
endif
endif
3 楼
Matodied [专家分:7560] 发布于 2007-07-17 14:12:00
是不是这个程序?
(加上注释后的程序):
REM L10-15
SCREEN 1
DATA 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1 '迷宫矩阵数据
DATA 1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1
DATA 1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1
DATA 1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1
DATA 1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1
x=10:y=9 '迷宫的大小
CLS:a$=STRING$(3,219):b$=STRING$(3,176)
DIM s(100),x(100),y(100),a(x,y):xe=9:ye=9 '定义数组和出口位置
FOR i=1 TO x:FOR j=1 TO y '读入数据,输出迷宫图
READ a(i,j)
IF a(i,j)=1 THEN LOCATE i,j*3:PRINT a$ '用黑长方形表示墙
NEXT j,i
FOR i=1 TO 4:FOR i=1 TO 2 '读入四个前进走向的数据
READ v(i,j)
NEXT j,i:DATA 0,1,1,0,0,-1,-1,0
LOCATE 12:PRINT "Press any key to run":d$=INPUT$(1) '暂停,按任何键运行
x=2:y=0:p=0:x(p)=x:y(p)=y:i=0 '入口等数据初始化
DO
i=i+1 '搜索到一个前进的走向
IF i<=4 THEN '此前进的方向有效
x=x(p)+v(i,1):y=y(p)+v(i,2) '试探前进一步
IF a(x,y)=0 THEN '此位置是空地,可走
p=p+1:s(p)=i:x(p)=x:y(p)=y '真正前进一步,各数据存入数组
a(x,y)=2 '给走过的位置打上记号,不能再走
i=0 '在新的位置全方位去搜索
GOSUB 10 '输出前进的步号
END IF
ELSE '否则,前进的方向无效
GOSUB 10 '抹去前进的步号,变为网格
i=s(p):p=p-1 '取出存入s数组的i值,后退一步再搜索
END IF
LOOP UNTIL p=0 OR x=xe AND y=ye '退到入口或到达出口,循环终止
IF p=0 THEN '如退到入口则输出无解
PRINT "无法通过"
ELSE '否则有解就输出路线
LOCATE 14:PRINT"运行路线:入口";2;",";0;"-->";
FOR i=1 TO p
PRINT x(i);",";y(i);"-->";
NEXT i:PRINT"出口"
END IF
END
10 LOCATE x(p),y(p)*3:FOR k=1 TO 30000:NEXT k
IF i<=4 THEN PRINT USING"##";p ELSE PRINT b$
RETURN
4 楼
wzc1996 [专家分:1680] 发布于 2007-07-17 20:56:00
[quote]是不是这个程序?
(加上注释后的程序):
REM L10-15
SCREEN 1
DATA 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1 '迷宫矩阵数据
DATA 1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1
DATA 1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1
DATA 1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1
DATA 1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1
x=10:y=9 '迷宫的大小
CLS:a$=STRING$(3,219):b$=STRING$(3,176)
DIM s(100),x(100),y(100),a(x,y):xe=9:ye=9 '定义数组和出口位置
FOR i=1 TO x:FOR j=1 TO y '读入数据,输出迷宫图
READ a(i,j)
IF a(i,j)=1 THEN LOCATE i,j*3:PRINT a$ '用黑长方形表示墙
NEXT j,i
FOR i=1 TO 4:FOR i=1 TO 2 '读入四个前进走向的数据
READ v(i,j)
NEXT j,i:DATA 0,1,1,0,0,-1,-1,0
LOCATE 12:PRINT "Press any key to run":d$=INPUT$(1) '暂停,按任何键运行
x=2:y=0:p=0:x(p)=x:y(p)=y:i=0 '入口等数据初始化
DO
i=i+1 '搜索到一个前进的走向
IF i<=4 THEN '此前进的方向有效
x=x(p)+v(i,1):y=y(p)+v(i,2) '试探前进一步
IF a(x,y)=0 THEN '此位置是空地,可走
p=p+1:s(p)=i:x(p)=x:y(p)=y '真正前进一步,各数据存入数组
a(x,y)=2 '给走过的位置打上记号,不能再走
i=0 '在新的位置全方位去搜索
GOSUB 10 '输出前进的步号
END IF
ELSE '否则,前进的方向无效
GOSUB 10 '抹去前进的步号,变为网格
i=s(p):p=p-1 '取出存入s数组的i值,后退一步再搜索
END IF
LOOP UNTIL p=0 OR x=xe AND y=ye '退到入口或到达出口,循环终止
IF p=0 THEN '如退到入口则输出无解
PRINT "无法通过"
ELSE '否则有解就输出路线
LOCATE 14:PRINT"运行路线:入口";2;",";0;"-->";
FOR i=1 TO p
PRINT x(i);",";y(i);"-->";
NEXT i:PRINT"出口"
END IF
END
10 LOCATE x(p),y(p)*3:FOR k=1 TO 30000:NEXT k
IF i<=4 THEN PRINT USING"##";p ELSE PRINT b$
RETURN[/quote]
老帖里有!!!!!
5 楼
Lovely哆啦 [专家分:1360] 发布于 2007-07-23 09:47:00
[quote][quote]是不是这个程序?
(加上注释后的程序):
REM L10-15
SCREEN 1
DATA 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1 '迷宫矩阵数据
DATA 1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1
DATA 1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1
DATA 1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1
DATA 1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1
x=10:y=9 '迷宫的大小
CLS:a$=STRING$(3,219):b$=STRING$(3,176)
DIM s(100),x(100),y(100),a(x,y):xe=9:ye=9 '定义数组和出口位置
FOR i=1 TO x:FOR j=1 TO y '读入数据,输出迷宫图
READ a(i,j)
IF a(i,j)=1 THEN LOCATE i,j*3:PRINT a$ '用黑长方形表示墙
NEXT j,i
FOR i=1 TO 4:FOR i=1 TO 2 '读入四个前进走向的数据
READ v(i,j)
NEXT j,i:DATA 0,1,1,0,0,-1,-1,0
LOCATE 12:PRINT "Press any key to run":d$=INPUT$(1) '暂停,按任何键运行
x=2:y=0:p=0:x(p)=x:y(p)=y:i=0 '入口等数据初始化
DO
i=i+1 '搜索到一个前进的走向
IF i<=4 THEN '此前进的方向有效
x=x(p)+v(i,1):y=y(p)+v(i,2) '试探前进一步
IF a(x,y)=0 THEN '此位置是空地,可走
p=p+1:s(p)=i:x(p)=x:y(p)=y '真正前进一步,各数据存入数组
a(x,y)=2 '给走过的位置打上记号,不能再走
i=0 '在新的位置全方位去搜索
GOSUB 10 '输出前进的步号
END IF
ELSE '否则,前进的方向无效
GOSUB 10 '抹去前进的步号,变为网格
i=s(p):p=p-1 '取出存入s数组的i值,后退一步再搜索
END IF
LOOP UNTIL p=0 OR x=xe AND y=ye '退到入口或到达出口,循环终止
IF p=0 THEN '如退到入口则输出无解
PRINT "无法通过"
ELSE '否则有解就输出路线
LOCATE 14:PRINT"运行路线:入口";2;",";0;"-->";
FOR i=1 TO p
PRINT x(i);",";y(i);"-->";
NEXT i:PRINT"出口"
END IF
END
10 LOCATE x(p),y(p)*3:FOR k=1 TO 30000:NEXT k
IF i<=4 THEN PRINT USING"##";p ELSE PRINT b$
RETURN[/quote]
老帖里有!!!!![/quote]
6 楼
剑圣风暴 [专家分:450] 发布于 2007-07-23 12:37:00
SCREEN 1
DATA 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1 DATA 1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1
DATA 1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1
DATA 1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1
DATA 1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1
x=10:y=9 '
CLS:a$=STRING$(3,219):b$=STRING$(3,176)
DIM s(100),x(100),y(100),a(x,y):xe=9:ye=9 '
FOR i=1 TO x:FOR j=1 TO y READ a(i,j)
IF a(i,j)=1 THEN LOCATE i,j*3:PRINT a$ NEXT j,i
FOR i=1 TO 4:FOR i=1 TO 2
READ v(i,j)
NEXT j,i:DATA 0,1,1,0,0,-1,-1,0
LOCATE 12:PRINT "Press any key to run":d$=INPUT$(1) '
x=2:y=0:p=0:x(p)=x:y(p)=y:i=0 ' DO
i=i+1 ' IF i<=4 THEN ' x=x(p)+v(i,1):y=y(p)+v(i,2) '
IF a(x,y)=0 THEN ' p=p+1:s(p)=i:x(p)=x:y(p)=y '真正前进一步,各数据存入数组
a(x,y)=2 '给走过的位置打上记号,不能再走
i=0 '在新的位置全方位去搜索
GOSUB 10 '输出前进的步号
END IF
ELSE '否则,前进的方向无效
GOSUB 10 '抹去前进的步号,变为网格
i=s(p):p=p-1 '取出存入s数组的i值,后退一步再搜索
END IF
LOOP UNTIL p=0 OR x=xe AND y=ye '退到入口或到达出口,循环终止
IF p=0 THEN '如退到入口则输出无解
PRINT "无法通过"
ELSE '否则有解就输出路线
LOCATE 14:PRINT"运行路线:入口";2;",";0;"-->";
FOR i=1 TO p
PRINT x(i);",";y(i);"-->";
NEXT i:PRINT"出口"
END IF
END
10 LOCATE x(p),y(p)*3:FOR k=1 TO 30000:NEXT k
IF i<=4 THEN PRINT USING"##";p ELSE PRINT b$
RETURN
7 楼
V2战警2 [专家分:390] 发布于 2007-07-24 17:34:00
SCREEN 1
DATA 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1 DATA 1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1
DATA 1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1
DATA 1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1
DATA 1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1
x=10:y=9 '
CLS:a$=STRING$(3,219):b$=STRING$(3,176)
DIM s(100),x(100),y(100),a(x,y):xe=9:ye=9 '
FOR i=1 TO x:FOR j=1 TO y READ a(i,j)
IF a(i,j)=1 THEN LOCATE i,j*3:PRINT a$ NEXT j,i
FOR i=1 TO 4:FOR i=1 TO 2
READ v(i,j)
NEXT j,i:DATA 0,1,1,0,0,-1,-1,0
LOCATE 12:PRINT "Press any key to run":d$=INPUT$(1) '
x=2:y=0:p=0:x(p)=x:y(p)=y:i=0 ' DO
i=i+1 ' IF i<=4 THEN ' x=x(p)+v(i,1):y=y(p)+v(i,2) '
IF a(x,y)=0 THEN ' p=p+1:s(p)=i:x(p)=x:y(p)=y '真正前进一步,各数据存入数组
a(x,y)=2 '给走过的位置打上记号,不能再走
i=0 '在新的位置全方位去搜索
GOSUB 10 '输出前进的步号
END IF
ELSE '否则,前进的方向无效
GOSUB 10 '抹去前进的步号,变为网格
i=s(p):p=p-1 '取出存入s数组的i值,后退一步再搜索
END IF
LOOP UNTIL p=0 OR x=xe AND y=ye '退到入口或到达出口,循环终止
IF p=0 THEN '如退到入口则输出无解
PRINT "无法通过"
ELSE '否则有解就输出路线
LOCATE 14:PRINT"运行路线:入口";2;",";0;"-->";
FOR i=1 TO p
PRINT x(i);",";y(i);"-->";
NEXT i:PRINT"出口"
END IF
END
10 LOCATE x(p),y(p)*3:FOR k=1 TO 30000:NEXT k
IF i<=4 THEN PRINT USING"##";p ELSE PRINT b$
RETURN
Matodied!剑圣风暴!你们很赖皮!!!教科书上有的!!!!
[em27][em27][em27]
8 楼
zhangyurui2000427 [专家分:80] 发布于 2009-09-13 10:01:00
[quote]是不是这个程序?
(加上注释后的程序):
REM L10-15
SCREEN 1
DATA 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1 '迷宫矩阵数据
DATA 1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1
DATA 1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1
DATA 1,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,1,1
DATA 1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1
x=10:y=9 '迷宫的大小
CLS:a$=STRING$(3,219):b$=STRING$(3,176)
DIM s(100),x(100),y(100),a(x,y):xe=9:ye=9 '定义数组和出口位置
FOR i=1 TO x:FOR j=1 TO y '读入数据,输出迷宫图
READ a(i,j)
IF a(i,j)=1 THEN LOCATE i,j*3:PRINT a$ '用黑长方形表示墙
NEXT j,i
FOR i=1 TO 4:FOR i=1 TO 2 '读入四个前进走向的数据
READ v(i,j)
NEXT j,i:DATA 0,1,1,0,0,-1,-1,0
LOCATE 12:PRINT "Press any key to run":d$=INPUT$(1) '暂停,按任何键运行
x=2:y=0:p=0:x(p)=x:y(p)=y:i=0 '入口等数据初始化
DO
i=i+1 '搜索到一个前进的走向
IF i<=4 THEN '此前进的方向有效
x=x(p)+v(i,1):y=y(p)+v(i,2) '试探前进一步
IF a(x,y)=0 THEN '此位置是空地,可走
p=p+1:s(p)=i:x(p)=x:y(p)=y '真正前进一步,各数据存入数组
a(x,y)=2 '给走过的位置打上记号,不能再走
i=0 '在新的位置全方位去搜索
GOSUB 10 '输出前进的步号
END IF
ELSE '否则,前进的方向无效
GOSUB 10 '抹去前进的步号,变为网格
i=s(p):p=p-1 '取出存入s数组的i值,后退一步再搜索
END IF
LOOP UNTIL p=0 OR x=xe AND y=ye '退到入口或到达出口,循环终止
IF p=0 THEN '如退到入口则输出无解
PRINT "无法通过"
ELSE '否则有解就输出路线
LOCATE 14:PRINT"运行路线:入口";2;",";0;"-->";
FOR i=1 TO p
PRINT x(i);",";y(i);"-->";
NEXT i:PRINT"出口"
END IF
END
10 LOCATE x(p),y(p)*3:FOR k=1 TO 30000:NEXT k
IF i<=4 THEN PRINT USING"##";p ELSE PRINT b$
RETURN[/quote]
9 楼
phile [专家分:2310] 发布于 2009-09-13 10:42:00
3楼是书上程序
我来回复