Как преобразовать матрицу смежности в список смежности в JavaScript? - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь реализовать метод для преобразования матрицы смежности в список смежности.Моя реализация не правильно конвертировать из матрицы в список.Это была моя первая попытка,

//Adjacency Matrix to Adjc list

function convertToAdjList(adjMatrix) {
  var adjList = new Array(adjMatrix.length - 1);

  for (var i = 0; i < adjMatrix.length; i++) {
    if (adjMatrix[i] == 1) {
      //I think i have to do something here.
    }
    for (var j = 0; j < adjMatrix.length - 1; j++) {
      if (adjMatrix[i][j] == 1) {
        adjList[i] = i;//not sure if this is quite right.
      }
    }
  }
  return adjList;
}
var testMatrix = [
  [0, 1, 1, 1],
  [1, 0, 0, 0],
  [1, 0, 0, 0],
  [1, 0, 0, 0]
];
console.log(convertToAdjList(testMatrix)); //[[1,2,3],[0],[0],[0];

Вывод - это всего лишь один из 4 массивов, которые я ожидал вывести код, плюс ноль с индексом 0. У кого-нибудь есть идеи, как это исправить?

1 Ответ

1 голос
/ 12 марта 2019

Вы можете отобразить индексы или -1 как нежелательное значение, а затем отфильтровать это значение.

function convertToAdjList(adjMatrix) {
    return adjMatrix.map(a => a.map((v, i) => v ? i : -1).filter(v => v !== -1))
}

var testMatrix = [ [0, 1, 1, 1], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]];

console.log(convertToAdjList(testMatrix)); // [[1, 2, 3], [0], [0], [0]]
.as-console-wrapper { max-height: 100% !important; top: 0; }
...