У меня есть двумерный массив 2d_array[x][y]
, и для конкретного x мне нужно выбрать ay с наибольшим значением, с конкретными ограничениями.Также массив является фиксированным, и диапазон х составляет 0-24, а диапазон у 0-3.X определяется вектором позиции, как показано ниже.
Эти ограничения:
-if x == 0
затем y != 0
-if x == 4
затем y != 2
-if x == 0-4
затем y != 3
-if x == 20-24
затем y != 4
Я пробовал что-то подобное (обратите внимание, что это простопроизвольное значение в диапазоне от 0 до 24):
std::vector<float,float> position = { 4, 0};
int x = pos.x + (5 * pos.y); //4 for test, change it for edge cases
int bestY= 0;
float highestReward = 2d_array[x][0];
for (int i = 0; i < 4; i++) {
if (2d_array[x][i] > highestReward) {
if (((bestY == 0 && x == 0) || (bestY == 1 && x == 4)) || ((bestY == 2 && (x >= 0 && x <= 4)) || (bestY == 3 && (x >= 0 && x <= 24))) {
bestY++;
}
else {
highestReward = 2d_array[x][i];
bestY = i;
}
}
}
И затем я обновляю позицию соответственно:
if (bestY == 0) pos.x--;
if (bestY == 1) pos.x++;
if (bestY == 2) pos.y--;
if (bestY == 3) pos.y++;
Но он просто продолжает переполнять позицию, поэтому, когда я пытаюсь читать в следующей итерацииУ меня просто нарушение прав доступа.