removeNode method
Removes the given node from the graph and all edges which are connected with this node.
Implementation
Graph removeNode(Node node ) {
_nodes.remove( node.index );
if ( digraph == false ) {
// if the graph is not directed, remove all edges leading to this node
final edges = _edges[node.index];
for ( final edge in edges! ) {
final edgesOfNeighbor = _edges[edge.to];
for ( int i = ( (edgesOfNeighbor?.length ?? 0) - 1 ); i >= 0; i -- ) {
final edgeNeighbor = edgesOfNeighbor![ i ];
if ( edgeNeighbor.to == node.index ) {
final index = edgesOfNeighbor.indexOf( edgeNeighbor );
edgesOfNeighbor.removeAt( index );
break;
}
}
}
}
else {
// if the graph is directed, remove the edges the slow way
for ( final edges in _edges.values ) {
for ( int i = ( edges.length - 1 ); i >= 0; i -- ) {
final edge = edges[ i ];
if ( !hasNode( edge.to ) || !hasNode( edge.from ) ) {
final index = edges.indexOf( edge );
edges.removeAt( index );
}
}
}
}
// delete edge list of node (edges leading from this node)
_edges.remove( node.index );
return this;
}