code: func (g *UndirectedGraph) RemoveNode(n graph.Node) {
  	if _, ok := g.nodes[n.ID()]; !ok {
  		return
  	}
  	delete(g.nodes, n.ID())
  
  	g.edges[n.ID()].Visit(func(neighbor int, edge graph.Edge) {
  		g.edges[neighbor] = g.edges[neighbor].Delete(n.ID())
  	})
  	delete(g.edges, n.ID())
  
  	g.freeIDs.Insert(n.ID())
  	g.usedIDs.Remove(n.ID())
  
  }
docs: // RemoveNode removes n from the graph, as well as any edges attached to it. If the node
  // is not in the graph it is a no-op.