关于双向链表的问题?

sdjnlf 2002-05-06 10:04:37
一个9X9的表格中有不定数量的棋子,假如我选中其中的一枚棋子,要把他移动到另一格中去,请给出移动路径的算法。移动过程中一次移动一格,若格中已经有棋子,则要转向。
...全文
33 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xiaomei_127 2002-05-08
不明白你们在讲什么,小女子不懂了,可不可以讲清楚点,明白点呀!!!
回复
DavidHowe 2002-05-07
那我再解释一下: 链表中每个元素都有一个标志,保存着是在处理哪个前面的元素时增加的这个新元素,这样,顺着这个线索不就能回溯上去了?
回复
DavidHowe 2002-05-07
看来我还没有说清楚,我怀疑我的表达能力了.;)

是这样的: 链表中的每个节点中(头节点除外),除了保存你认为需要的信息外(如双链表的pPrior,pNext),最重要的还有一个信息,就是该节点是你在搜索前面哪个节点的四周四个节点时添加进此双链表的.

这样子,最先得出的路径,就是最短路径了.
回复
xb4270293 2002-05-07
更正以下,以上发言针对DavidHowe()的回溯方法。而不是wgjmail(笑面佛)
回复
xb4270293 2002-05-07
“保存着是在处理哪个前面的元素时增加的这个新元素”
这句话听起来费劲。

我理解为:双向链表中指向前后元素的指针

wgjmail(笑面佛)的回溯会导致一种可能,棋子从当前点出发,绕了一大圈远路,到达终点。而不是最短距离的方法。如果棋盘不是9X9的,走起来会很丑。不是好办法。

回复
Kiloy 2002-05-07
up
回复
笑面佛_正版 2002-05-06
你好象说得不够清楚,若是我来做的话,我就会用一9*9的数组,为1时表示有棋子,为0时表示没有棋子,再建另一9*9的数组,在其中和前一个对就的位置存放棋子对应的数字代码,你看这样能完成你的要求吗
回复
xb4270293 2002-05-06
算法难在“回溯”上,楼上不要避实就虚。
回复
DavidHowe 2002-05-06
这是个求最短路径的问题,用双向联表可以实现.
我写一下伪代码吧.

{
构造空的双向联表; (链表中保存某格子的坐标,以及是从哪个链表元素到这个格子的)
联表头的元素为棋子的起点;

依次遍历双向链表的每个元素,做如下的操作:
扫描该位置的4个相邻格子,如果没有棋子,且没有加入过链表,则将这个格子的坐标加入联表的尾部;
做如上的操作,直至到了目标格子.

这时,利用是从哪个格子到这里的这个变量,一直回溯,就有了路径了.
}
回复
sdjnlf 2002-05-06
我想用双向链表实现
回复
wlz47 2002-05-06
不知道跟双向链表有什么关系?
不过可以用堆栈实现,在《数据结构C语言版》(清华)里面有详细说明
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-06 10:04
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……