回 帖 发 新 帖 刷新版面

主题:闯迷宫

各位大侠,帮帮忙.我是菜鸟,现求书上闯迷宫的解释和如何记住它.如能有效使用,必加分
!!!!!!!!!!![em10][em18]

回复列表 (共9个回复)

沙发

程序呢?

板凳

我来说说核心部分的思路。
if not 成功 then
if 是出口 then
    成功
else
    if 右边是空 then 
        向右
    elseif 下边是空 then
        向下
    elseif 左边是空 then
        向左
    elseif 上边是空 then
        向上
    endif
endif
endif

3 楼

是不是这个程序?
(加上注释后的程序):
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 楼

[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 楼

[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 楼

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 楼

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 楼

[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 楼

3楼是书上程序

我来回复

您尚未登录,请登录后再回复。点此登录或注册