回 帖 发 新 帖 刷新版面

主题:周游的骑士(回溯)

国际象棋中的骑士与中国象棋中的马一样,能往8个方向跳。
输入:
  N(一个整数)
输出:
  骑士在n×n的棋盘中如何走遍所有格子而不重复。

回复列表 (共5个回复)

沙发

[url]http://yzfy.org/bbs/viewthread.php?tid=364[/url]
这个么?


回溯加贪心

板凳

看看[url=http://www.programfan.com/club/post-247916.html]这个[/url]吧,也许会对你有些启发(不过是用PASCAL写的)

3 楼

程序:(1<n<5无解)
CLS
DATA 2,1,1,2,-2,1,-1,2,1,-2,2,-1,-2,-1,-1,-2
INPUT n
DIM map(n, n), st(n, n), v(8, 2), s(n * n), x(n * n), y(n * n)
FOR i = 1 TO 8: READ v(i, 1), v(i, 2): NEXT i
i = 0: p = 0: x = -1: y = 0: s(p) = i: x(p) = x: y(p) = y
DO
  i = i + 1
  IF i <= 8 THEN
     x = x(p) + v(i, 1): y = y(p) + v(i, 2)
     IF x >= 1 AND y >= 1 AND x <= n AND y <= n THEN
        IF map(x, y) = 0 THEN
           p = p + 1: s(p) = i: x(p) = x: y(p) = y
           map(x, y) = 1: st(x, y) = p: i = 0
        END IF
     END IF
  ELSE
     i = s(p)
     IF p > 0 THEN map(x(p), y(p)) = 0: st(x(p), y(p)) = 0
     p = p - 1
  END IF
LOOP UNTIL p = -1 OR p = n * n
IF p = -1 THEN
   PRINT "No way!"
ELSE
   FOR i = 1 TO n
       FOR j = 1 TO n
           PRINT USING "####"; st(i, j);
       NEXT j: PRINT
   NEXT i
END IF
END

4 楼

厉害!

5 楼

搜索 - <马踏棋盘>

我来回复

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