如何将JavaScript中的邻接矩阵转换为邻接表?
How to Convert Adjacency Matrix to Adjacency List in JavaScript?
我正在尝试实现一种将邻接矩阵转换为邻接表的方法。我的实现没有正确地将矩阵转换为列表。
这是我第一次尝试,
//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
映射为不需要的值,然后过滤该值。
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; }
不使用 'map' 的另一种方法是像下面这样写,这可能不是那么好,但仍然可以完成工作。
function convertToAdjList(adjMatrix) {
var adjList = [];
for (var i = 0; i < adjMatrix.length; i++) {
var array=[];
for (var j = 0; j < adjMatrix.length; j++) {
if (adjMatrix[i][j] == 1) {
array.push(j);
}
}
adjList[i]=array;
}
return adjList;
}
可以说时间复杂度是O(V^2)。但是,我想如果我们想将邻接表转换为邻接矩阵,时间复杂度将是 O(V*E).
我正在尝试实现一种将邻接矩阵转换为邻接表的方法。我的实现没有正确地将矩阵转换为列表。 这是我第一次尝试,
//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
映射为不需要的值,然后过滤该值。
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; }
不使用 'map' 的另一种方法是像下面这样写,这可能不是那么好,但仍然可以完成工作。
function convertToAdjList(adjMatrix) {
var adjList = [];
for (var i = 0; i < adjMatrix.length; i++) {
var array=[];
for (var j = 0; j < adjMatrix.length; j++) {
if (adjMatrix[i][j] == 1) {
array.push(j);
}
}
adjList[i]=array;
}
return adjList;
}
可以说时间复杂度是O(V^2)。但是,我想如果我们想将邻接表转换为邻接矩阵,时间复杂度将是 O(V*E).