Я хочу выполнить поиск определенного типа. Я не знаю, есть ли у него имя, но я могу описать его и иметь рабочий код для его выполнения.
Для двумерной матрицы, начинающейся в точке 0,0 и работающей вниз справа, генерация поиска будет выглядеть следующим образом:
- 1, 4, 9, 16, ...
- 2, 3, 8, 15, ...
- 5, 6, 7, 14, ...
- 10, 11, 12, 13, ...
- ...
Таким образом, первый цикл поиска будет проверять 1, второй цикл проверяет 2, 3, 4, третий цикл проверяет 5, 6, 7, 8, 9 и т. Д.
Код для поиска:
$row_search = 0;
$point_not_found = true;
while ($point_not_found && $row_search < $matrix_height/2)
{
$current = array(0, $row_search);
while ($current[0] < $row_search)
{
if (searchForPoint( $matrix, $current ) !== false)
$point_not_found = false;
++$current[0];
}
if (!$anchor_not_found)
break;
while ($current[1] >= 0)
{
if (searchForPoint( $matrix, $current ) !== false)
$point_not_found = false;
--$current[1];
}
++$row_search;
}
Я недоволен тем, как поиск разбивается на два цикла, так как код внутри циклов почти идентичен. Можете ли вы предложить способ объединения или вложения циклов и исключения избыточных вызовов для searchForPoint?