docs: def simplex_connect(self, solution_g):
          '''
          API:
              simplex_connect(self, solution_g)
          Description:
              At this point we assume that the solution does not have a cycle.
              We check if all the nodes are connected, if not we add an arc to
              solution_g that does not create a cycle and return True. Otherwise
              we do nothing and return False.
          Pre:
              (1) We assume there is no cycle in the solution.
          Input:
              solution_g: current spanning tree solution instance.
          Post:
              (1) solution_g is updated. An arc that does not create a cycle is
              added.
              (2) 'component' attribute of nodes are changed.
          Return:
              Returns True if an arc is added, returns False otherwise.
          '''
          nl = solution_g.get_node_list()
          current = nl[0]
          pred = solution_g.simplex_search(current, current)
          separated = list(pred.keys())
          for n in nl:
              if solution_g.get_node(n).get_attr('component') != current:
                  # find an arc from n to seperated
                  for m in separated:
                      if (n,m) in self.edge_attr:
                          solution_g.add_edge(n,m)
                          return True
                      elif (m,n) in self.edge_attr:
                          solution_g.add_edge(m,n)
                          return True
          return False