Алгоритм, который вы использовали для решения лабиринта, представляет собой алгоритм DFS , и предоставленное решение не обязательно будет кратчайшим путем к месту назначения.
Конечное условие вашей рекурсии гарантирует, что вы получите только одно решение. То, что вы рассматриваете как несколько решений, на самом деле является одним решением, как можно видеть из следующего печатного примера, основанного на вашем коде (сетка 10 * 10, xx - стены, пункт назначения - (6) (3), каждый лабиринт ячейка заключена в '|', посещенные ячейки - 's):
другой пример:
и еще один:
Пронумерованные шаги в решение показывает, что алгоритм DFS обеспечил очень длинный и извилистый путь к месту назначения.
Итог - вы получаете одно решение, которое намного длиннее, чем вы думаете.
Немного проблем с этим.
Во-первых:
'$this->appendError'остановка. Это не интерпретирует $this к текущему классу, php интерпретирует его как строку '$this'.
Во-вторых: попробовать
set_error_handler(array($this, 'appendError'));
Если это не работает, $this замены с именем класса и использует его статически.
Прочитайте документацию обратного вызова php.net. Я думаю, что пример 3 является самым близким к тому, что Вы хотите:
// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));