mirror of
https://github.moeyy.xyz/https://github.com/trekhleb/javascript-algorithms.git
synced 2024-12-27 07:31:17 +08:00
Make it possible to delete edge from graph.
This commit is contained in:
parent
cb48efee79
commit
808a1e713f
@ -88,6 +88,25 @@ export default class Graph {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {GraphEdge} edge
|
||||||
|
*/
|
||||||
|
deleteEdge(edge) {
|
||||||
|
// Delete edge from the list of edges.
|
||||||
|
if (this.edges[edge.getKey()]) {
|
||||||
|
delete this.edges[edge.getKey()];
|
||||||
|
} else {
|
||||||
|
throw new Error('Edge not found in graph');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to find and end start vertices and delete edge from them.
|
||||||
|
const startVertex = this.getVertexByKey(edge.startVertex.getKey());
|
||||||
|
const endVertex = this.getVertexByKey(edge.endVertex.getKey());
|
||||||
|
|
||||||
|
startVertex.deleteEdge(edge);
|
||||||
|
endVertex.deleteEdge(edge);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {GraphVertex} startVertex
|
* @param {GraphVertex} startVertex
|
||||||
* @param {GraphVertex} endVertex
|
* @param {GraphVertex} endVertex
|
||||||
|
@ -218,4 +218,47 @@ describe('Graph', () => {
|
|||||||
|
|
||||||
expect(graph.getWeight()).toBe(10);
|
expect(graph.getWeight()).toBe(10);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should be possible to delete edges from graph', () => {
|
||||||
|
const graph = new Graph();
|
||||||
|
|
||||||
|
const vertexA = new GraphVertex('A');
|
||||||
|
const vertexB = new GraphVertex('B');
|
||||||
|
const vertexC = new GraphVertex('C');
|
||||||
|
|
||||||
|
const edgeAB = new GraphEdge(vertexA, vertexB);
|
||||||
|
const edgeBC = new GraphEdge(vertexB, vertexC);
|
||||||
|
const edgeAC = new GraphEdge(vertexA, vertexC);
|
||||||
|
|
||||||
|
graph
|
||||||
|
.addEdge(edgeAB)
|
||||||
|
.addEdge(edgeBC)
|
||||||
|
.addEdge(edgeAC);
|
||||||
|
|
||||||
|
expect(graph.getAllEdges().length).toBe(3);
|
||||||
|
|
||||||
|
graph.deleteEdge(edgeAB);
|
||||||
|
|
||||||
|
expect(graph.getAllEdges().length).toBe(2);
|
||||||
|
expect(graph.getAllEdges()[0].getKey()).toBe(edgeBC.getKey());
|
||||||
|
expect(graph.getAllEdges()[1].getKey()).toBe(edgeAC.getKey());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should should throw an error when trying to delete not existing edge', () => {
|
||||||
|
function deleteNotExistingEdge() {
|
||||||
|
const graph = new Graph();
|
||||||
|
|
||||||
|
const vertexA = new GraphVertex('A');
|
||||||
|
const vertexB = new GraphVertex('B');
|
||||||
|
const vertexC = new GraphVertex('C');
|
||||||
|
|
||||||
|
const edgeAB = new GraphEdge(vertexA, vertexB);
|
||||||
|
const edgeBC = new GraphEdge(vertexB, vertexC);
|
||||||
|
|
||||||
|
graph.addEdge(edgeAB);
|
||||||
|
graph.deleteEdge(edgeBC);
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(deleteNotExistingEdge).toThrowError();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user