input: Write a python function to find the shortest path in a grid from a source to a destination using BFS.
  assert list(find_shortest_path([0, 0], [5, 5])) == [(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5)]
  assert list(find_shortest_path([0, 0], [1, 2])) == [(0, 0), (1, 0), (1, 1), (1, 2)]
  assert list(find_shortest_path([0, 0], [0, 5])) == [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5)]
output: from collections import deque
  
  def find_shortest_path(source, destination):
      directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
      queue = deque([(source, [source])])
      visited = set([source])
      
      while queue:
          current, path = queue.popleft()
          
          if current == destination:
              return path
          
          for direction in directions:
              next_row, next_col = current[0] + direction[0], current[1] + direction[1]
              next_position = (next_row, next_col)
              
              if next_position not in visited:
                  visited.add(next_position)
                  queue.append((next_position, path + [next_position]))
                  
      return []