Спасибо за объяснение, действительно ценю это, позвольте мне записать ваши шаги в код завтра.

ача в сетке функции с велосипедами и человеком на местах

[ 'c' , '_' ,'A' ,'_', '_' , '_']
[ '_' , '_' ,'a' ,'_', '_' , '_']
[ '_' , '_' ,'_' ,'_', 'b' , '_']
[ '_' , '_' ,'_' ,'_', '_' , '_']
[ 'D' , 'd' ,'_' ,'_', '_' , 'B']
[ '_' , '_' ,'_' ,'C', '_' , '_']

Выход: Что-то вроде этого[A:1, B:3, C:8, D:1]

Где А - это человек, а 1 - шаг, необходимый для того, чтобы добраться до велосипеда.

Характеристики:

Ближайший человек к велосипеду, получите велосипед на первом месте.Один велосипед не может быть назначен на 2 человекаРасстояние велосипеда от одного человека никогда не будет равно расстоянию одного велосипеда от другого человека.Расстояния могут быть одинаковыми, но 2 разных велосипеда и 2 разных человека

Я чувствую, что графическое представление может иметь больше смысла, следовательно,

Мой подход:

Найдите расположение велосипедов и персонажа и сохраните их в массиве.

person = [[0,2],[4,0],[4,5],[5,3]], bikes = [[0,0],[1,2],[2,4],[4,1]];

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

Нужно продолжать делать шаг № 2, пока наш массив не будет пуст

function findBikesForPeople(grid) {

  let row_length = grid.length;
  let col_length = grid[0].length;
  var bikes = [],
    person = [];

  for (var row = 0; row < row_length; row++) {
    for (var col = 0; col < col_length; col++) {
      if (grid[row][col] === 'B') {
        bikes.push([row, col]);
      }
      if (grid[row][col] === 'P') {
        person.push([row, col]);
      }
    }
  }

  var distances = (bikes, person) => {
    var dist = [];
    person.map((single) => {
      var inner = [];
      bikes.map((bike) => {
        inner.push(check_distance(single, bike));
      })
      dist.push(inner);
    })
    return dist;
  }


  //This isn't right
  var AllocateBikes = (distances) => {
    //var result = [];
    //var min = 1;
    //var increment = 0;
    //  let people = distances.length;
    //let bikeCount = distances[0].length;
    //while (people > 0) {
    //  if (Math.min(...distances[]))
    // }
    return distances;
  }

  function check_distance(a, b) {
    return Math.abs(b[1] - a[1]) + Math.abs(b[0] - a[0]);
  }

  let distance_between = distances(bikes, person);
  console.log(AllocateBikes(distance_between));

}
var grid = [
  ['P', '_', 'B', '_', '_'],
  ['_', '_', '_', '_', 'B'],
  ['_', '_', '_', '_', '_'],
  ['_', 'P', '_', '_', '_'],
  ['_', '_', '_', '_', 'B']
];

findBikesForPeople(grid);

Ответы на вопрос(2)

Ваш ответ на вопрос