在迷宫中找到一条最短路径,然后行动
Find a shortest path in a maze and make a move
我正在制作一款胭脂游戏,其中一个怪物的行为是这样的。在迷宫中,如果怪物能够在15步或更短的时间内到达玩家身边,那么这便是最理想的移动方式。为了实现这一点,我编写了一个小程序来模仿游戏中将要发生的事情。我的程序的工作方式是,它能够检查x次移动是否能让他到达目的地。我唯一不确定的部分是如何获得第一步,所以我可以将该信息传递给我的怪物移动函数。这是我到目前为止写的程序。
#include <iostream>
using namespace std;
bool pathExists(char maze[][10], int sr, int sc, int er, int ec, int distance)
{
if (maze[sr][sc] != '.')
return false;
if (sr == er && sc == ec)
return true;
if(distance ==15)
{
cout<<"Cant make it in 15 steps"<<endl;
return false;
}
maze[sr][sc] = '@'; // anything non-'.' will do
if (pathExists(maze, sr-1, sc, er, ec, distance+1))
return true;
if (pathExists(maze, sr+1, sc, er, ec,distance+1))
return true;
if (pathExists(maze, sr, sc-1, er, ec, distance+1))
return true;
if (pathExists(maze, sr, sc+1, er, ec, distance+1))
return true;
return false;
}
int main()
{
char maze[10][10] = {
{ 'X','X','X','X','X','X','X','X','X','X'},
{ 'X','.','.','.','.','.','.','.','.','X'},
{ 'X','.','X','X','X','X','.','X','X','X'},
{ 'X','.','.','X','.','X','.','.','.','X'},
{ 'X','.','.','X','.','.','.','X','.','X'},
{ 'X','.','X','X','.','X','X','X','.','X'},
{ 'X','.','X','.','.','.','.','X','X','X'},
{ 'X','.','.','X','X','.','X','X','.','X'},
{ 'X','.','.','x','.','.','.','.','.','X'},
{ 'X','X','X','X','X','X','X','X','X','X'}
};
if (pathExists(maze, 8,8, 1,1,0))
cout << "Solvable!" << endl;
else
cout << "Out of luck!" << endl;
}
总结一下,我希望获得关于这个怪物迈出的第一步的信息。我知道这有点容易问,但我不熟悉递归,有点迷失在我的代码。
感谢c++的上帝。
选择*算法。尽管你需要计算出墙的碰撞。但既然你使用网格,我会说用A*算法。维基百科解释了这个算法。(伪代码)
你需要使用vector,因为它是c++。如果你仍然不理解维基百科上的代码,那么你可以使用我几个月前做的一个库。(不是一个库,但你可以称之为类似的代码。您将不得不更改一些值来使其工作。我把它做成了20x20的迷宫;你需要10x10)
相关文章:
- 内存效率表示最短路径的方法?
- 用于查找网格中最短路径的算法
- 查找最短路径算法
- BFS 打印最短路径
- 使用 Dijkstra 算法跟踪两个节点之间的最短路径
- 使用C++具有两个数字的最短路径算法.(C++)
- 使用迭代深度优先搜索算法的未加权图的最短路径
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 如何使用贝尔曼-福特算法返回所有具有捆绑重量的最短路径?
- 使用优先级队列查找所有与 Dijkstra 相同的最短路径
- 尝试在图形中查找最短路径时的无限循环
- C++计算有向图中的最短路径
- 使用BFS存储和打印最短路径
- 如何制作由原始图形的最短路径边组成的新图形
- 有没有一种方法可以使用弗洛伊德-沃歇尔算法给出最短路径,其中存在负权重循环而不允许重叠边缘?
- 加权图的开始和结束的最短路径
- 使 c++11 Dijkstra 实现返回最短路径
- 弗洛伊德最短路径算法C++
- Dijkstra 最短路径算法性能 std::p riority_queue VS std::set.
- 在迷宫中找到一条最短路径,然后行动