def BFS_search(gr, u, v):
  """
  Find the shortest path between two nodes (source and target) using
  the Breadth-First Search (BFS) algorithm.
  
  @type  gr: tlp.Graph
  @param gr: Tulip graph
  @type   u: tlp.node
  @param  u: first node of interest (source)
  @type   v: tlp.node
  @param  v: Second node of interest (target)
  """
  explored = []
  queue = []
  queue.append([u])
  while queue :
    path = queue.pop(0)
    node = path[-1]
    if node not in explored: 
      for n in gr.getInOutNodes(node):
        new_path = list(path)
        new_path.append(n)
        queue.append(new_path)
        if n == v:
          new_path.pop()
          del new_path[0]
          return new_path 
      explored.append(node)