如何在网格上找到从A到B的最短路径
How can I find the shortest path from A to B on a grid?
在我的练习中,我需要在矩阵上找到从一个点到另一个点的最短路径,但途中有一些障碍。我使用的是C++代码。
例如:
X X X X X X X X
X X X 4 X X 3 X
X X 8 X X X X X
0 X X X X 6 X X
如果我需要从持有0的位置到持有3,我知道我必须向右走六步,向上走两步。但是,在我的练习中,我不能忽略另一个数字;路径只能使用由X标记的位置。
我试图编写一个递归函数来解决这个问题,但它不起作用。
有人能帮我吗?
这是我写的代码:
int Rec(Point start, Point finish,Direction dira)
{
int up = 0, down = 0, left = 0, right = 0;
int res;
Point tmp;
if (finish.getX() == start.getX() && finish.getY()==start.getY())
return 0;
else if (dira == UP)
{
tmp = start;
tmp.setY(start.getY() - 1);
if (screen->getBoardChar(tmp) == ' '){
up++;
up += Rec(tmp, finish, UP);
}
tmp = start;
tmp.setX(start.getX() + 1);
if (screen->getBoardChar(tmp) == ' '){
right++;
right += Rec(tmp, finish, RIGHT);
}
tmp = start;
tmp.setX(start.getX() - 1);
if (screen->getBoardChar(tmp) == ' '){
left += Rec(tmp, finish, LEFT);
left++;
}
}
else if (dira == DOWN)
{
tmp = start;
tmp.setY(start.getY() + 1);
if (screen->getBoardChar(tmp) == ' ') {
down++;
down += Rec(tmp, finish, DOWN);
}
tmp = start;
tmp.setX(start.getX() + 1);
if (screen->getBoardChar(tmp) == ' ') {
right++;
right += Rec(tmp, finish, RIGHT);
}
tmp = start;
tmp.setX(start.getX() - 1);
if (screen->getBoardChar(tmp) == ' ') {
left += Rec(tmp, finish, LEFT);
left++;
}
}
else if (dira == LEFT)
{
tmp = start;
tmp.setY(start.getY() + 1);
if (screen->getBoardChar(tmp) == ' ') {
down++;
down += Rec(tmp, finish, DOWN);
}
tmp = start;
tmp.setX(start.getX() - 1);
if (screen->getBoardChar(tmp) == ' ') {
left += Rec(tmp, finish, LEFT);
left++;
}
tmp = start;
tmp.setY(start.getY() - 1);
if (screen->getBoardChar(tmp) == ' ') {
up++;
up += Rec(tmp, finish, UP);
}
}
else
{
tmp = start;
tmp.setY(start.getY() + 1);
if (screen->getBoardChar(tmp) == ' ') {
down++;
down += Rec(tmp, finish, DOWN);
}
tmp = start;
tmp.setY(start.getY() - 1);
if (screen->getBoardChar(tmp) == ' ') {
up++;
up += Rec(tmp, finish, UP);
}
tmp = start;
tmp.setX(start.getX() + 1);
if (screen->getBoardChar(tmp) == ' ') {
right++;
right += Rec(tmp, finish, RIGHT);
}
}
res = Smallest(up, down, left, right);
return res;
}
你很容易有两个位置,你现在在哪里,你需要去哪里,所以你做while循环,直到你到达正确的x,然后做while环路,直到你达到正确的y。你还需要知道女巫的方向,这样你就可以计算出它也不是硬以太
int char[4][8] = { values };
int fromnum;// from witch number
int tonum;// to number
int fromx, fromy;//from coordinates
int tox,toy; // to coordinates
for (int i = 0; i < 4; i++) {
for (int a = 0; a < 8; a++) {
//find a cordinates of your start and end point
}
}
// when you know cordinates you can just supstract them and you will know the path
相关文章:
- 内存效率表示最短路径的方法?
- 用于查找网格中最短路径的算法
- 查找最短路径算法
- BFS 打印最短路径
- 使用 Dijkstra 算法跟踪两个节点之间的最短路径
- 使用C++具有两个数字的最短路径算法.(C++)
- 使用迭代深度优先搜索算法的未加权图的最短路径
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 如何使用贝尔曼-福特算法返回所有具有捆绑重量的最短路径?
- 使用优先级队列查找所有与 Dijkstra 相同的最短路径
- 尝试在图形中查找最短路径时的无限循环
- C++计算有向图中的最短路径
- 使用BFS存储和打印最短路径
- 如何制作由原始图形的最短路径边组成的新图形
- 有没有一种方法可以使用弗洛伊德-沃歇尔算法给出最短路径,其中存在负权重循环而不允许重叠边缘?
- 加权图的开始和结束的最短路径
- 使 c++11 Dijkstra 实现返回最短路径
- 如何在网格上找到从A到B的最短路径
- 到网格所有点的最短路径
- 4x4 网格 c++ 上的最短路径