parent
82ca40711b
commit
d08bcd28dc
@ -0,0 +1,42 @@ |
||||
// an undirected graph
|
||||
class Graph { |
||||
constructor() { |
||||
// Graph has an adjacencyList attribute set as an object
|
||||
this.adjacencyList = {} |
||||
} |
||||
|
||||
addVertex(vertex) { |
||||
// to avoid overwriting the existing vertex, we need if statement
|
||||
if (!this.adjacencyList[vertex]) this.adjacencyList[vertex] = [] |
||||
} |
||||
|
||||
addEdge(vertex1, vertex2) { |
||||
// undirected graph is two way connection
|
||||
//we push both vertices to each other's array
|
||||
this.adjacencyList[vertex1].push(vertex2) |
||||
this.adjacencyList[vertex2].push(vertex1) |
||||
} |
||||
|
||||
removeEdge(ver1, ver2) { |
||||
// two way connection, delete from both arrays
|
||||
this.adjacencyList[ver1] = this.adjacencyList[ver1].filter( |
||||
v => v !== ver2 |
||||
) |
||||
this.adjacencyList[ver2] = this.adjacencyList[ver2].filter( |
||||
v => v !== ver1 |
||||
) |
||||
} |
||||
|
||||
removeVertex(vertex) { |
||||
// first find all the conncetion, and remove all edges from both parties,
|
||||
// and then delete the vertex from the adjacency list
|
||||
let edges = this.adjacencyList[vertex] |
||||
|
||||
for (let edge of edges) { |
||||
this.removeEdge(vertex, edge) |
||||
} |
||||
delete this.adjacencyList[vertex] |
||||
} |
||||
} |
||||
|
||||
export default Graph |
Loading…
Reference in new issue