回 帖 发 新 帖 刷新版面

主题:[原创]迷宫程序,大家看看多顶顶

迷宫程序,大家看看多顶顶,也提提意见,啊~~

回复列表 (共15个回复)

沙发

没程序啊,哎……
我来发一个吧:
CLS
INPUT "X, y = ", x, y
DIM a(12, 12)
FOR i = 1 TO x
  FOR j = 1 TO y
    PRINT "A("; LTRIM$(RTRIM$(STR$(i))); ","; LTRIM$(RTRIM$(STR$(j))); ")=";
    INPUT "", a(i, j)
    IF a(i, j) = 1 THEN flag = 1
    IF a(i, j) <> 1 AND a(i, j) <> 0 THEN PRINT "Data Error!": END
NEXT j, i
IF flag <> 1 THEN PRINT "Data Error!": END
CLS
FOR i = 1 TO x
  FOR j = 1 TO y
    PRINT USING "###"; a(i, j);
  NEXT j: PRINT
NEXT i
PRINT "Press any key to continue(Press E to end)"
DO
  z$ = INKEY$
LOOP UNTIL z$ <> ""
IF z$ = "E" THEN END
CLS : a$ = STRING$(3, CHR$(219)): b$ = STRING$(3, CHR$(176))
DIM s(100), x(100), y(100)
FOR i = 1 TO x
  FOR j = 1 TO y
    IF a(i, j) = 1 THEN LOCATE i, j * 3: PRINT a$
NEXT j, i
FOR i = 1 TO 4: FOR j = 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)
INPUT "Start I, J = ", x, y
y = y - 1
INPUT "End I, J = ", xe, ye
p = 0: x(p) = x: y(p) = y: i = 0
IF xe <= 0 OR ye <= 0 THEN PRINT "Data Error!": END
IF a(xe, ye) = 1 THEN PRINT "Data Error!": END
PRINT
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
  END IF
LOOP UNTIL p = 0 OR x = xe AND y = ye
IF p = 0 THEN
  PRINT "Not Find"
ELSE
  LOCATE 14: PRINT "Start"; 2; ","; 0; "---->";
  FOR i = 1 TO p
    PRINT x(i); ","; y(i); "---->";
  NEXT i
  PRINT "Finish"
END IF
END
10 LOCATE x(p), y(p) * 3: FOR k = 1 TO 30000: NEXT
IF i <= 4 THEN PRINT USING "##"; p ELSE PRINT b$
RETURN

板凳

[quote]没程序啊,哎……
我来发一个吧:
CLS
INPUT "X, y = ", x, y
DIM a(12, 12)
FOR i = 1 TO x
  FOR j = 1 TO y
    PRINT "A("; LTRIM$(RTRIM$(STR$(i))); ","; LTRIM$(RTRIM$(STR$(j))); ")=";
    INPUT "", a(i, j)
    IF a(i, j) = 1 THEN flag = 1
    IF a(i, j) <> 1 AND a(i, j) <> 0 THEN PRINT "Data Error!": END
NEXT j, i
IF flag <> 1 THEN PRINT "Data Error!": END
CLS
FOR i = 1 TO x
  FOR j = 1 TO y
    PRINT USING "###"; a(i, j);
  NEXT j: PRINT
NEXT i
PRINT "Press any key to continue(Press E to end)"
DO
  z$ = INKEY$
LOOP UNTIL z$ <> ""
IF z$ = "E" THEN END
CLS : a$ = STRING$(3, CHR$(219)): b$ = STRING$(3, CHR$(176))
DIM s(100), x(100), y(100)
FOR i = 1 TO x
  FOR j = 1 TO y
    IF a(i, j) = 1 THEN LOCATE i, j * 3: PRINT a$
NEXT j, i
FOR i = 1 TO 4: FOR j = 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)
INPUT "Start I, J = ", x, y
y = y - 1
INPUT "End I, J = ", xe, ye
p = 0: x(p) = x: y(p) = y: i = 0
IF xe <= 0 OR ye <= 0 THEN PRINT "Data Error!": END
IF a(xe, ye) = 1 THEN PRINT "Data Error!": END
PRINT
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
  END IF
LOOP UNTIL p = 0 OR x = xe AND y = ye
IF p = 0 THEN
  PRINT "Not Find"
ELSE
  LOCATE 14: PRINT "Start"; 2; ","; 0; "---->";
  FOR i = 1 TO p
    PRINT x(i); ","; y(i); "---->";
  NEXT i
  PRINT "Finish"
END IF
END
10 LOCATE x(p), y(p) * 3: FOR k = 1 TO 30000: NEXT
IF i <= 4 THEN PRINT USING "##"; p ELSE PRINT b$
RETURN

[/quote]
此题可以考虑用递归!!

3 楼

[quote][quote]没程序啊,哎……
我来发一个吧:
CLS
INPUT "X, y = ", x, y
DIM a(12, 12)
FOR i = 1 TO x
  FOR j = 1 TO y
    PRINT "A("; LTRIM$(RTRIM$(STR$(i))); ","; LTRIM$(RTRIM$(STR$(j))); ")=";
    INPUT "", a(i, j)
    IF a(i, j) = 1 THEN flag = 1
    IF a(i, j) <> 1 AND a(i, j) <> 0 THEN PRINT "Data Error!": END
NEXT j, i
IF flag <> 1 THEN PRINT "Data Error!": END
CLS
FOR i = 1 TO x
  FOR j = 1 TO y
    PRINT USING "###"; a(i, j);
  NEXT j: PRINT
NEXT i
PRINT "Press any key to continue(Press E to end)"
DO
  z$ = INKEY$
LOOP UNTIL z$ <> ""
IF z$ = "E" THEN END
CLS : a$ = STRING$(3, CHR$(219)): b$ = STRING$(3, CHR$(176))
DIM s(100), x(100), y(100)
FOR i = 1 TO x
  FOR j = 1 TO y
    IF a(i, j) = 1 THEN LOCATE i, j * 3: PRINT a$
NEXT j, i
FOR i = 1 TO 4: FOR j = 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)
INPUT "Start I, J = ", x, y
y = y - 1
INPUT "End I, J = ", xe, ye
p = 0: x(p) = x: y(p) = y: i = 0
IF xe <= 0 OR ye <= 0 THEN PRINT "Data Error!": END
IF a(xe, ye) = 1 THEN PRINT "Data Error!": END
PRINT
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
  END IF
LOOP UNTIL p = 0 OR x = xe AND y = ye
IF p = 0 THEN
  PRINT "Not Find"
ELSE
  LOCATE 14: PRINT "Start"; 2; ","; 0; "---->";
  FOR i = 1 TO p
    PRINT x(i); ","; y(i); "---->";
  NEXT i
  PRINT "Finish"
END IF
END
10 LOCATE x(p), y(p) * 3: FOR k = 1 TO 30000: NEXT
IF i <= 4 THEN PRINT USING "##"; p ELSE PRINT b$
RETURN

[/quote]
此题可以考虑用递归!![/quote]

递归的思路也是回溯!!!

4 楼

哈哈,递归比回溯快!

5 楼

迷宫的程序一般都是使用回溯来做的

6 楼

高手用递归!

7 楼

[quote]高手用递归![/quote]
BT![em46]

8 楼

?

9 楼

[quote]高手用递归![/quote]


谁说的啊,我同学那么厉害,都不用递归

10 楼

递归快呀!

我来回复

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