Не могу найти правильный путь из лабиринта путем обхода в ширину

266
25 сентября 2017, 04:48

Здравствуйте. Если матрица:

matrix = [
    [0, 1, 0, 1, 0],
    [0, 0, 1, 0, 0],
    [0, 0, 1, 1, 0],
    [0, 0, 0, 0, 0],
    [0, 1, 0, 1, 0]
 ];

Нужно найти путь от точки start до точки end, но двигаться можно только по ячейкам, которые не содержат единицу.

var start = [4,0];
 var end = [3,4];

Написала код, но его проблема в том, что в массив посещенных вершин он добавляет все, в которые может зайти. А мне нужно, чтобы добавлялись только те, которые ведут к выходу.

matrix = [
    [0, 1, 0, 1, 0],
    [0, 0, 1, 0, 0],
    [0, 0, 1, 1, 0],
    [0, 0, 0, 0, 0],
    [0, 1, 0, 1, 0]
 ];
 var start = [4,0];
 var end = [3,4];

function findWay(position, end)
{
    var queue = [];
    var visited = [];
    matrix[position[0]][position[1]] = 1;
    visited.push(position);
    queue.push(position);
    while(queue.length > 0){
        var pos = queue.shift();
        var direction = [ [ pos[0] + 1, pos[1] ], [ pos[0], pos[1] + 1 ], 
                    [ pos[0] - 1, pos[1] ], [ pos[0], pos[1] - 1 ] ];
        for(var i = 0; i < direction.length; i++){
            if (direction[i][0] < 0 || direction[i][0] >= matrix[0].length) continue;
            if (direction[i][1] < 0 || direction[i][1] >= matrix[0].length) continue;
            if (direction[i][0] == end[0] && direction[i][1] == end[1]) return visited;
            if (matrix[direction[i][0]][direction[i][1]] != 0) continue;

            matrix[direction[i][0]][direction[i][1]] = 1;
            queue.push(direction[i]);
            visited.push(direction[i]);
        }
    }
    return visited;
}
findWay(start, end);
READ ALSO
Событие закрытия вкладки

Событие закрытия вкладки

Открываю вкладку и нужно отследить когда она закроется

334
Telegram bot meteor

Telegram bot meteor

Добрый день, я использую данную библиотеку: https://githubcom/benjick/meteor-telegram-bot

268
js как заблокировать кнопку submit?

js как заблокировать кнопку submit?

Здравствуйте ребята, прошу помощиХочу заблокировать кнопку(submit) по нажатию на неё, чтобы пользователь не отправлял данные формы несколько...

475