mirror of
https://github.moeyy.xyz/https://github.com/trekhleb/javascript-algorithms.git
synced 2024-12-27 15:41:16 +08:00
Use Infinity instead of zero in Graph adjacency matrix to show that vertices are not connected.
This commit is contained in:
parent
f966ef5d5d
commit
3e0ac7486c
@ -15,7 +15,7 @@ function isSafe(adjacencyMatrix, verticesIndices, cycle, vertexCandidate) {
|
|||||||
const endVertexAdjacencyIndex = verticesIndices[endVertex.getKey()];
|
const endVertexAdjacencyIndex = verticesIndices[endVertex.getKey()];
|
||||||
|
|
||||||
// Check if last vertex in the path and candidate vertex are adjacent.
|
// Check if last vertex in the path and candidate vertex are adjacent.
|
||||||
if (!adjacencyMatrix[endVertexAdjacencyIndex][candidateVertexAdjacencyIndex]) {
|
if (adjacencyMatrix[endVertexAdjacencyIndex][candidateVertexAdjacencyIndex] === Infinity) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ function isCycle(adjacencyMatrix, verticesIndices, cycle) {
|
|||||||
const endVertexAdjacencyIndex = verticesIndices[endVertex.getKey()];
|
const endVertexAdjacencyIndex = verticesIndices[endVertex.getKey()];
|
||||||
|
|
||||||
// Check if we can go from end vertex to the start one.
|
// Check if we can go from end vertex to the start one.
|
||||||
return !!adjacencyMatrix[endVertexAdjacencyIndex][startVertexAdjacencyIndex];
|
return adjacencyMatrix[endVertexAdjacencyIndex][startVertexAdjacencyIndex] !== Infinity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -177,18 +177,17 @@ export default class Graph {
|
|||||||
const vertices = this.getAllVertices();
|
const vertices = this.getAllVertices();
|
||||||
const verticesIndices = this.getVerticesIndices();
|
const verticesIndices = this.getVerticesIndices();
|
||||||
|
|
||||||
// Init matrix with zeros.
|
// Init matrix with infinities meaning that there is no ways of
|
||||||
|
// getting from one vertex to another yet.
|
||||||
const adjacencyMatrix = Array(vertices.length).fill(null).map(() => {
|
const adjacencyMatrix = Array(vertices.length).fill(null).map(() => {
|
||||||
return Array(vertices.length).fill(0);
|
return Array(vertices.length).fill(Infinity);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Fill the columns.
|
// Fill the columns.
|
||||||
vertices.forEach((vertex, vertexIndex) => {
|
vertices.forEach((vertex, vertexIndex) => {
|
||||||
vertex.getNeighbors().forEach((neighbor) => {
|
vertex.getNeighbors().forEach((neighbor) => {
|
||||||
const neighborIndex = verticesIndices[neighbor.getKey()];
|
const neighborIndex = verticesIndices[neighbor.getKey()];
|
||||||
adjacencyMatrix[vertexIndex][neighborIndex] = this.isDirected ?
|
adjacencyMatrix[vertexIndex][neighborIndex] = this.findEdge(vertex, neighbor).weight;
|
||||||
this.findEdge(vertex, neighbor).weight :
|
|
||||||
1;
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -348,10 +348,10 @@ describe('Graph', () => {
|
|||||||
|
|
||||||
const adjacencyMatrix = graph.getAdjacencyMatrix();
|
const adjacencyMatrix = graph.getAdjacencyMatrix();
|
||||||
expect(adjacencyMatrix).toEqual([
|
expect(adjacencyMatrix).toEqual([
|
||||||
[0, 1, 0, 0],
|
[Infinity, 0, Infinity, Infinity],
|
||||||
[1, 0, 1, 1],
|
[0, Infinity, 0, 0],
|
||||||
[0, 1, 0, 1],
|
[Infinity, 0, Infinity, 0],
|
||||||
[0, 1, 1, 0],
|
[Infinity, 0, 0, Infinity],
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -375,10 +375,10 @@ describe('Graph', () => {
|
|||||||
|
|
||||||
const adjacencyMatrix = graph.getAdjacencyMatrix();
|
const adjacencyMatrix = graph.getAdjacencyMatrix();
|
||||||
expect(adjacencyMatrix).toEqual([
|
expect(adjacencyMatrix).toEqual([
|
||||||
[0, 2, 0, 0],
|
[Infinity, 2, Infinity, Infinity],
|
||||||
[0, 0, 1, 7],
|
[Infinity, Infinity, 1, 7],
|
||||||
[0, 0, 0, 5],
|
[Infinity, Infinity, Infinity, 5],
|
||||||
[0, 0, 0, 0],
|
[Infinity, Infinity, Infinity, Infinity],
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user