У меня возникли проблемы с Visual Studio, поэтому извиняюсь заранее, но я использую онлайн-сайты для компиляции и не могу использовать точки останова, так как так же, как хотелось бы в этой программе прямо сейчас.C++, A * Программа поиска не вычисляет расстояние от выхода правильно
Я все еще работаю над этим, но прямо сейчас получение значений H для A * Star, расстояния от выхода, похоже, не отображается/правильно вычисляется.
Он работает до определенной точки, а затем начинает работать назад.
Я считаю, что проблема в моем поиске, хотя это дает узлам их значение и что оно отображается правильно, но не так, как ожидалось. Пункт 110 и далее. EG:
int start = 0;
bool search = true;
aStarArray[myCoord.endY][myCoord.endX].h = 0; // End cell coord, written as 0 for the H array. (0 distance to exit)
while (search == true) // Will end as soon as all nodes have been valued.
{
for (myCoord.y = 0; myCoord.y < HEIGHT; ++myCoord.y)
{
for (myCoord.x = 0; myCoord.x < WIDTH; ++myCoord.x)
{
if (aStarArray[myCoord.y][myCoord.x].h == start) // Is value we're looking for.
{
if (myCoord.y + 1 <= HEIGHT)
{
if (aStarArray[myCoord.y+1][myCoord.x].h == -1) // Not blocked, but not distanced yet and is a valid cell.
{
aStarArray[myCoord.y+1][myCoord.x].h = start + 1; // Then give it a value of parent cell + 1. (start + 1)
search = false;
}
}
if (myCoord.y - 1 >= 0)
{
if (aStarArray[myCoord.y-1][myCoord.x].h == -1)
{
aStarArray[myCoord.y-1][myCoord.x].h = start + 1;
search = false;
}
}
if (myCoord.x + 1 <= WIDTH)
{
if (aStarArray[myCoord.y][myCoord.x+1].h == -1)
{
aStarArray[myCoord.y][myCoord.x+1].h = start + 1;
search = false;
}
}
if (myCoord.x - 1 >= 0)
{
if (aStarArray[myCoord.y][myCoord.x-1].h == -1)
{
aStarArray[myCoord.y][myCoord.x-1].h = start + 1;
search = false;
}
}
}
}
}
start = start + 1;
if (search == false) // A change was made to a node on this loop of the array.
{
search = true; // Then assume more nodes await values, keep searching.
// Now we're moving on to one of those new distanced cells, so the parent changes and thus search terms.
// Start gets +1, so it's start searching for the new cells. And then it'll distance their neighbour cells to start+1, cycle repeats.
}
else // No changes.
{
search = false; // No need to search anymore, theoretically.
}
}
}
Результаты в настоящее время заключается в следующем:
Get H values for every node
6 7 6 5 4
5 6 5 4 3
4 5 4 3 2
3 4 3 2 1
2 3 2 1 0
Когда я хочу, чтобы это, например:
Get H values for every node
8 7 6 5 4
7 6 5 4 3
6 5 4 3 2
5 4 3 2 1
4 3 2 1 0
Полный код можно найти здесь: CPP .sh/8iykn
Если у кого-то есть какие-то рекомендации по исправить получение H, это будет оценено или просто любые ошибки вообще. Спасибо.
Вы пробовали [отладку кода] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ? –
Тот факт, что вы не можете отлаживать онлайн-компиляторы, не означает, что вы еще не несете ответственность за отладку перед отправкой. Мы не свободный, краудсорсированный отладчик. Мы здесь не для того, чтобы отлаживать вас бесплатно. Найдите путь вокруг своих ограничений, чтобы вы могли отлаживать свой код. Visual Studio можно получить бесплатно. –
У меня к лучшему могу. Я провел несколько часов и попробовал несколько разных реализаций, но никто не приблизился к этому. Единственные предупреждения, которые у меня есть, - это два неиспользуемых параметра, но я знаю, почему это так, и это не проблема. И как объяснено, я хотел бы использовать контрольные точки, но не могу, и это было бы только другим, что я бы сделал иначе. Это мое последнее средство, так как, скорее всего, это то, что я не понимаю, поэтому для меня бессмысленно продолжать перебирать его, поскольку я предполагаю, что что-то правильно, а это не так. – Ryan