一条回溯题,思路有了,调试通不过啊……

2014-10-24 23:38:31 +08:00
 publicID123
题目:
描述

棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。

棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过15的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入

一行四个数据,分别表示B点坐标和马的坐标。

输出

一个数据,表示所有的路径条数。

样例输入

6 6 3 3

样例输出

6

思路:
开一个二维数组表示所有点的情况,马可以达到的点飙为 false 。

只要卒和开始给的点重合就计数。

感觉思路没错,但是就是调试不对啊,求大牛帮看看代码到底错在哪里了。

代码:
https://gist.github.com/Dynamicer/516666e244ac5c0fee0c
2594 次点击
所在节点    问与答
8 条回复
z7059652
2014-10-24 23:54:29 +08:00
回溯法的回溯之处 你有吗?
xjx0524
2014-10-25 00:38:54 +08:00
卒的起点是0,0啊,你从马踩的位置搜干什么
再说这题递推就行不用搜索啊
stackpop
2014-10-25 00:42:35 +08:00
首先,把回溯法的概念搞清楚。

其次,建议楼主学一下 DFS, BFS
msg7086
2014-10-25 00:58:02 +08:00
我只指出其中一个错误。

if(map[x][y]=false)
msg7086
2014-10-25 01:00:27 +08:00
第二个错误你自己思考吧,不难。我已经调通了,应该是没有错的。

$ ./horse
6 6 3 3
6
$ ./horse
10 10 4 4
6802
randomize
2014-10-25 08:58:11 +08:00
@msg7086
感谢。Accepted .

剩余的一处错误是马自己的位置也是不能走的,而不仅仅是它能到的位置。

另外,顺带问下大大……我这么写算什么?真的不是传说中的回溯么……
randomize
2014-10-25 08:59:17 +08:00
似乎暴露了用了一下 publicID 233333333333
msg7086
2014-10-25 20:58:50 +08:00
@randomize 应该是可以算作回溯DFS递归。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/141356

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX