回 帖 发 新 帖 刷新版面

主题:谁能编个迷宫,能自动寻找出路的,而且能找出所有的?

谁能编个迷宫,能自动寻找出路的,而且能找出所有的?
[em18][em18][em18]

回复列表 (共3个回复)

沙发

[em18][em18][em18][em18][em18][em18][em18][em18][em18]
[em18][em18][em18][em18][em18][em18][em18][em18][em18]

板凳

我这有一道,迷宫如DATA数据,0代表可以走的,1代表障碍,我只能求出一条路径。

CLS
DIM maze(0 TO 11, 0 TO 11) AS INTEGER
DIM wz(1 TO 4, 1 TO 2) AS INTEGER
DIM lj(1 TO 100, 1 TO 2) AS INTEGER
DIM n AS INTEGER
DIM i AS INTEGER
DIM j AS INTEGER
DIM x AS INTEGER
DIM y AS INTEGER
FOR i = 1 TO 10
  FOR j = 1 TO 10
    READ maze(i, j)
  NEXT j
NEXT i
DATA 0,1,1,1,1,1,0,0,0,0
DATA 0,0,0,0,0,1,0,1,0,0
DATA 0,0,0,1,0,1,0,0,0,0
DATA 0,1,0,1,0,1,0,1,1,0
DATA 0,1,0,1,0,1,0,1,0,0
DATA 0,1,1,1,0,1,0,1,0,1
DATA 0,1,0,0,0,1,0,1,0,1
DATA 0,1,0,1,1,1,0,1,0,0
DATA 1,0,0,0,0,0,0,1,0,0
DATA 0,0,0,0,1,1,1,1,0,0
FOR i = 0 TO 11
  maze(i, 0) = 1: maze(i, 11) = 1
  maze(0, i) = 1: maze(11, i) = 1
NEXT i
FOR i = 1 TO 4
  READ wz(i, 1), wz(i, 2)
NEXT i
DATA 0,1,1,0,0,-1,-1,0
x = 1: y = 1
DO WHILE x <> 10 OR y <> 10
  FOR i = 1 TO 4
    IF maze(x + wz(i, 1), y + wz(i, 2)) = 0 THEN
      n = n + 1
      lj(n, 1) = x: lj(n, 2) = y
      maze(x, y) = 1
      x = x + wz(i, 1): y = y + wz(i, 2)
      EXIT FOR
    END IF
  NEXT i
  IF i = 5 THEN
    n = n - 1
    maze(lj(n, 1), lj(n, 2)) = 0
    maze(x, y) = 1
    x = lj(n, 1): y = lj(n, 2)
  END IF
LOOP
n = n + 1
lj(n, 1) = 10: lj(n, 2) = 10
FOR i = 1 TO n
  PRINT lj(i, 1); lj(i, 2),
NEXT i
END

3 楼

[url=http://www.programfan.com/club/showbbs.asp?id=85759]这是我上个月写的[/url]
而且我只是把迷宫画了出来,至于怎样走也是很简单的事情,只是我已经没有心情再去做了,太烦了,也没意思.


DEFINT A-Z
CLEAR

x = 128
y = 96
c = 5

DIM box%(x, y)

SCREEN 12
CLS

LINE (0, 0)-(639, 479), 7, B

FOR i = 5 TO 639 STEP 5
  LINE (i, 0)-(i, 479), c
NEXT

FOR j = 5 TO 479 STEP 5
  LINE (0, j)-(639, j), c
NEXT

  LINE (0, 0)-(5, 5), 1, BF
  LINE (635, 475)-(639, 479), 1, BF

RANDOMIZE TIMER

i = 1
j = 1

DO UNTIL i = x AND j = y
   II = i
   JJ = j
   q = 0
   DO
    DO
     k = RND * 3 + 1
     j = JJ + (k MOD 2) * (k - 2)
     i = II + (k MOD 2 - 1) * (k - 3)
    LOOP WHILE i < 1 OR j < 1 OR i > x OR j > y
     q = q + 1
   LOOP WHILE box%(i, j) AND q < 8
   LINE ((II * 5 - (k MOD 2) * 4 - (k \ 4) * 5), (JJ * 5 + (k MOD 2 - 1) * 4 + (k = 1) * 5))-((II * 5 - (k MOD 2) - (k \ 4) * 5), (JJ * 5 + (k MOD 2 - 1) + (k = 1) * 5)), 0
   box%(i, j) = 1
LOOP

FOR p = 1 TO 128
  FOR t = 1 TO 96
   IF box%(p, t) = 0 THEN
    i = p
    j = t
    DO
      II = i
      JJ = j
      q = 0
      DO
       DO
        k = RND * 3 + 1
        j = JJ + (k MOD 2) * (k - 2)
        i = II + (k MOD 2 - 1) * (k - 3)
       LOOP WHILE i < 1 OR j < 1 OR i > x OR j > y
        q = q + 1
      LOOP WHILE box%(i, j) AND q < 8
        LINE ((II * 5 - (k MOD 2) * 4 - (k \ 4) * 5), (JJ * 5 + (k MOD 2 - 1) * 4 + (k = 1) * 5))-((II * 5 - (k MOD 2) - (k \ 4) * 5), (JJ * 5 + (k MOD 2 - 1) + (k = 1) * 5)), 0
        box%(i, j) = 2
    LOOP WHILE q < 8
   END IF
NEXT t, p

k$ = INPUT$(1)
SCREEN 0

我来回复

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