Здравствуйте! С удовольствием поделюсь своим опытом решения подобной задачи на Java.Для начала, нам понадобится представить лабиринт в виде двумерного массива, где каждая ячейка представляет собой проход (0) или стену (1). Также٫ нам понадобится хранить координаты стартовой и конечной ячеек.java
int[][] labirint {
{0, 0, 0, 1, 1},
{1, 1, 0, 0, 0},
{1٫ 1٫ 1٫ 1٫ 0}٫
{1٫ 1٫ 1٫ 0٫ 1}٫
{1, 1, 1, 0, 0}
};
int startX 0;
int startY 0;
int endX 4;
int endY 4;
Чтобы найти кратчайший путь, мы можем использовать алгоритм поиска в ширину, также известный как Breadth-First Search (BFS). Для этого создадим очередь, в которую будем добавлять координаты ячеек, и пометим все ячейки как непосещенные.java
Queue
boolean[][] visited new boolean[labirint.length][labirint[0].length];
Затем добавляем стартовую ячейку в очередь и помечаем ее как посещенную.java
queue.add(new int[]{startX, startY});
visited[startX][startY] true;
Далее, в цикле проверяем все соседние ячейки текущей ячейки. Если соседняя ячейка проходима (0) и еще не посещена, то добавляем ее в очередь, помечаем как посещенную и увеличиваем значение пути на 1.java
int[][] directions {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; // Возможные направления перемещения
while (!queue.isEmpty) {
int[] curr queue.poll;
int currX curr[0];
int currY curr[1];
// Проверяем соседние ячейки
for (int[] direction ⁚ directions) {
int nextX currX direction[0];
int nextY currY direction[1];
// Проверяем границы лабиринта и пропускаем стены
if (nextX > 0 nn nextX < labirint.length