В этом случае я бы выбрал функцию-член.
Правило, которому я следую, состоит в том, что если функция должна получить доступ к чему-то, что является внутренним по отношению к текущему состоянию экземпляра, то она должна быть частью «области» класса.
В этом случае связность A и B зависит от состояния экземпляра вашего объекта.
Конечно, у вас может быть класс, имеющий слишком много обязанностей. В этом случае учитывается фактор простоты, и вы должны подумать, не пытается ли ваш класс сделать слишком много. Тогда было бы удобно иметь отдельный класс (например, в вашем случае ConnectednessEvaluator), чья особая роль состоит в том, чтобы содержать алгоритмы, которые могут проходить и воздействовать на ваши экземпляры Maze.