迷宫解决使用图表

时间:2010-11-14 04:12:03

标签: c++ graph depth-first-search breadth-first-search maze

嘿,我参加了当地的编程比赛,他们问我这个问题,我不能这样做,请帮我解决这个问题。

编写一个程序,从一个迷宫大小的文件加载,然后加载迷宫本身。 为了模拟迷宫,我们使用指定起始单元格的字符“S”,“。”指定空闲单元格,“#”是墙,“F”是最终单元格。 编写一个程序,找到从起始单元到最终单元的路径。 您可以认为在迷宫中有一个服从命令的机器人,因此对于以下迷宫,机器人应该接收以下命令:向上,向上,向右,向右,向下,向下。

迷宫1文本文件

5 5
#####
#...#
#.#.#
#S#T#
#####

迷宫2文本文件

4 5
#.#.#
#.#.#
#S#T#
#####

一般编写程序(迷宫最大输入最多可为200x200)。

非常感谢帮助。我只是一个崛起的sophmore,所以如果你能提供我的代码,那么我就能理解它,而且他们会自己再做一次。

3 个答案:

答案 0 :(得分:3)

如果您不知道要搜索的内容: http://en.wikipedia.org/wiki/Pathfinding#Sample_algorithm 这包含了很多信息: http://www.astrolog.org/labyrnth/algrithm.htm

答案 1 :(得分:2)

查找路径的一种方法:

  1. 要检查要检查的单元格队列,以及从那里到目的地的每个单元格的步数。
  2. 将结束单元格的计数设置为0,并将其添加到队列中。
  3. 队列不为空时:
    1. 从队列中获取一个单元格。
    2. 对于每个自由相邻小区,将当前小区的计数+ 1与相邻小区的计数进行比较。如果它更少,如果相邻小区还没有计数,则将相邻小区的计数设置为当前小区的计数+ 1,然后将相邻小区添加到队列中。
  4. 一旦队列为空,迷宫中的每个空闲单元(可以从目的地到达)将具有到达目的地的最短路径中的步数。如果一个单元格没有计数,则没有从它到目的地的路径。

    如果起始单元格有计数,

    1. 获取开始单元格数。
    2. 检查每个相邻单元格的计数(count-1)。 成为一个,这就是路径中的下一步。记录该单元格的方向,然后获取该单元格,如果它不是目标,请使用该单元格重复步骤2.
    3. 我会告诉你如何加载迷宫。这是所有这一切的简单部分。

答案 2 :(得分:0)

这里的代码太多了,但解决迷宫最常见的方法是向一个方向开始,每转右一圈就可以向右转。

只要开始和退出位于四个围墙之一,就可以保证工作。对于没有沿着墙壁开始和退出的迷宫,它是递归练习。

根据这一点作为起点,看看你能想出什么样的代码!

HTH, 詹姆斯