主题:周游的骑士(回溯)
QB爱好者
[专家分:370] 发布于 2007-08-28 14:30:00
国际象棋中的骑士与中国象棋中的马一样,能往8个方向跳。
输入:
N(一个整数)
输出:
骑士在n×n的棋盘中如何走遍所有格子而不重复。
回复列表 (共5个回复)
沙发
雨中飞燕 [专家分:18980] 发布于 2007-08-28 14:42:00
[url]http://yzfy.org/bbs/viewthread.php?tid=364[/url]
这个么?
回溯加贪心
板凳
Matodied [专家分:7560] 发布于 2007-08-28 19:44:00
看看[url=http://www.programfan.com/club/post-247916.html]这个[/url]吧,也许会对你有些启发(不过是用PASCAL写的)
3 楼
Matodied [专家分:7560] 发布于 2007-08-29 07:58:00
程序:(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 楼
强强 [专家分:4740] 发布于 2007-08-29 17:23:00
厉害!
5 楼
moz [专家分:37620] 发布于 2007-08-29 22:25:00
搜索 - <马踏棋盘>
我来回复