挑战你的大脑!地图问题!

seafire 2004-04-21 11:08:30
一个矩阵描述一幅地图:
int MapTemplet[9][9]=
{
// 1 2 3 4 5 6 7 8 9列
{0, 3, 0, 0, 3, 0, 0, 3, 0}, //1行,有三个目标点
{0, 0, 0, 0, 0, 0, 0, 0, 0}, //2行,没有障碍
{0, 0, 0, 1, 0, 1, 0, 0, 0}, //3行,两个障碍
{0, 1, 0, 0, 1, 0, 0, 1, 0}, //4行,三个障碍
{0, 0, 0, 1, 0, 1, 0, 0, 0}, //5行,两个障碍
{0, 0, 0, 0, 0, 0, 0, 0, 0}, //6行,没有障碍
{0, 1, 0, 0, 1, 0, 0, 1, 0}, //7行,3个障碍
{0, 0, 0, 0,-1, 0, 0, 0, 0}, //8行,-1标志出发点
{0, 0, 0, 0, 0, 0, 0, 0, 0} //9行,没有障碍
};
问题:给出C++源码,找出从出发点(标志为-1)到三个目标点(标志为3)的最短
路径;
规则:1:路径中的节点不能是有障碍物的点(标志为1);
2:找出的路径必须是把三个目标点(标志为3)遍历。

试验通过,立即给分,不够再加。
...全文
106 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
imlmm 2004-04-24
  • 打赏
  • 举报
回复
其实问题的本质就是要求出两个点之间的最短距离
seafire 2004-04-24
  • 打赏
  • 举报
回复
要求总路径最短。
imlmm 2004-04-24
  • 打赏
  • 举报
回复
具体操作上,搂主可以以起始点为根,构造一棵 4 叉树(即每个节点最多有 4 各自节点,分别代表上下左右,如果对应值为 0 则是一个字节点,如果是 3 则为树叶,否则为空)。
树构造完成后,遍历树求出MIN(S, O1), MIN(S, O2), MIN(S, O3), 以及对应的路径
同理分别求出MIN(O1, O2), MIN(O1, O3), MIN(O2, O3)
然后比较上面的 6 个值,最小的即为索要得最短路经。构造树及便利树的具体代码,书上应该有例子,不再多说
imlmm 2004-04-24
  • 打赏
  • 举报
回复
其实很简单,大致说个思路吧,假设起始点是 S, 目标点分别是 O1, O2, O3,
按到达目标点的顺序的不同总共有 6 中可能,距其中一个为例
1。S--O1--O2--O3
在此情况下,显然有距离之和 COUNT >= MIN(S, O1) + MIN(O1, O2) + MIN(O2, O3)
结合其他 5 种可能,最小值是
MIN(S, O1) + MIN(O1, O2) + MIN(O2, O3)
MIN(S, O1) + MIN(O1, O3) + MIN(O3, O2)
MIN(S, O2) + MIN(O2, O1) + MIN(O1, O3)
MIN(S, O2) + MIN(O2, O3) + MIN(O3, O1)
MIN(S, O3) + MIN(O3, O1) + MIN(O1, O2)
MIN(S, O3) + MIN(O3, O2) + MIN(O2, O1)
6 个值中的一种
ZhangYv 2004-04-23
  • 打赏
  • 举报
回复
就是一个搜索的问题,是否要求总路径最短?要的话就稍复杂点,不要就EASY的很...
badguy2002 2004-04-23
  • 打赏
  • 举报
回复
随便找本书,人工智能的,都有
菜牛 2004-04-22
  • 打赏
  • 举报
回复
游戏地图编程用的吧,网上有很多资料,什么A、A*,自己找一下吧。
lsaturn 2004-04-22
  • 打赏
  • 举报
回复
mark
seafire 2004-04-22
  • 打赏
  • 举报
回复
规则补充:每个点的下一个点必须是上下左右的相邻点,不能走两点的对角线。
fbmsf 2004-04-22
  • 打赏
  • 举报
回复
有意思我喜欢。应该是2点之间直线最短,但就要看怎么来绕过樟碍。
goldpony 2004-04-22
  • 打赏
  • 举报
回复
up
PiggyXP 2004-04-22
  • 打赏
  • 举报
回复
好像是有个A*算法可以对付此类问题,不过不懂,友情up
lonelyman96 2004-04-22
  • 打赏
  • 举报
回复
人工智能中的A*算法.有几个改进版本,专解此类问题!
QunKangLi 2004-04-22
  • 打赏
  • 举报
回复
主要是按规则选一个合适的数据结构,那样的话想具体算法才会事半功倍.
QunKangLi 2004-04-22
  • 打赏
  • 举报
回复
倒!游戏规则是什么?
A.如果允许一点通向任意一点,则算法为:-1->3.1->3.2->3.3
B.如果允许走象步,马步,或其它任意方向的斜线,或仅允许走横/纵直线,或步长不定时,算法不尽相同,但主要原理是向运动方向定义为目标点逼近.
seafire 2004-04-22
  • 打赏
  • 举报
回复
这个算法是找不到的,我想。
社会栋梁 2004-04-21
  • 打赏
  • 举报
回复
mark
seafire 2004-04-21
  • 打赏
  • 举报
回复
好像不算是迷宫问题。
weakwater 2004-04-21
  • 打赏
  • 举报
回复
迷宫问题?
fanfyj 2004-04-21
  • 打赏
  • 举报
回复
去看看离散数学吧
加载更多回复(2)

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧