如何在网格上找到从A到B的最短路径

How can I find the shortest path from A to B on a grid?

本文关键字:最短路径 网格      更新时间:2023-10-16

在我的练习中,我需要在矩阵上找到从一个点到另一个点的最短路径,但途中有一些障碍。我使用的是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