有一道关于跳棋的遍历问题

dyingswan 2010-07-29 09:31:15
一个跳棋棋盘
int p[17][25]={
0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0
1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0
0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0
0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0
0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0
0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0
0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0
0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0
1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1
0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
};
其中1代表棋格,现在把某些1变为2,代表其上有棋子,现在输入某个2的坐标,怎样得到他所能跳到的所有地方?(注意,这里的跳是等距跳,可以连跳)
...全文
103 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
aduxiaozi 2010-07-29
可以用一个树的深度优先遍历么?用数组记录走过的路径。
回复
小楫轻舟 2010-07-29
楼主把跳的规则再说清楚一些,
能斜跳(对角线)吗?
一步跳一格,二格,三格?
有棋子的地方不能落脚,还是也不能从其上面跳过?
连跳可以更换方向吗?
。。。。。。。。。
基本思路:
1,将一步跳至的位置保存在一个动态数组reached[]里
2,从数组reached里依次取出位置点,跳下一步,判断新的位置是否在数组reached里,
若不在,加入到数组reached里。
3,终止条件,走到reached数组的结尾,也即没有新的位置加入了。
回复
lzdoudou 2010-07-29
路过看看
回复
dyingswan 2010-07-29
这里的高手呢?
回复
technician00 2010-07-29
眼好花啊,,,,,
回复
dyingswan 2010-07-29
[Quote=引用 4 楼 lightboat09 的回复:]
楼主把跳的规则再说清楚一些,
能斜跳(对角线)吗?
一步跳一格,二格,三格?
有棋子的地方不能落脚,还是也不能从其上面跳过?
连跳可以更换方向吗?
。。。。。。。。。
基本思路:
1,将一步跳至的位置保存在一个动态数组reached[]里
2,从数组reached里依次取出位置点,跳下一步,判断新的位置是否在数组reached里,
若不在,加入到数组reached里。
3,……
[/Quote]
你的方法真好,我搞出来了,谢谢
回复
超级大笨狼 2010-07-29
简单的深搜,DP,递归

20分钟就可以搞定

F(x,y)
{
把x,y设置成跳过
for 所有没跳,能跳的地方{F(新x,新y,路径+xy)}
}
回复
dyingswan 2010-07-29
[Quote=引用 5 楼 aduxiaozi 的回复:]
可以用一个树的深度优先遍历么?用数组记录走过的路径。
[/Quote]
你能说的详细一点么
回复
dyingswan 2010-07-29
[Quote=引用 4 楼 lightboat09 的回复:]
楼主把跳的规则再说清楚一些,
能斜跳(对角线)吗?
一步跳一格,二格,三格?
有棋子的地方不能落脚,还是也不能从其上面跳过?
连跳可以更换方向吗?
。。。。。。。。。
基本思路:
1,将一步跳至的位置保存在一个动态数组reached[]里
2,从数组reached里依次取出位置点,跳下一步,判断新的位置是否在数组reached里,
若不在,加入到数组reached里。
3,……
[/Quote]
规则跟QQ跳棋一样,一共六个方向,左右,斜左上下,斜右上下,连跳可以更换方向,且跳的时候是按等距跳,比方斜右上方向最近的子跟要跳的子隔了4格,则跳到与最近点对称的那个点,且与原棋子所在连线中只含最近的那个子
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告