В моем упражнении мне нужно найти кратчайший путь от одной точки к другой на матрице, и на пути есть некоторые препятствия. Я использую код C++.Как найти кратчайший путь от A до B на сетке?
Например:
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
Если мне нужно получить от местоположения холдинга в месте, проведение , я знаю, что я должен идти шесть шагов вправо и два шага вверх , Но в моем упражнении я не могу пройти еще один номер; путь должен использовать только местоположения, отмеченные знаком 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;
}
Я попытался уточнить ваше название и текст вашего вопроса. Было бы полезно точно знать, что вы имеете в виду, когда говорите, что ваш код не работает. –
Привет, проблема в том, что rec dont realy дает мне исправить количество шагов .. я не знаю больше, чем; / –