CSES - Wall breaking

A labyrinth has two kinds of wall squares: walls at the border of the labyrinth are marked with # and internal walls are marked with *. You can break an internal wall to open new routes through the labyrinth.

Your task is to find a route from the square A to the square B. In each step, you can move horizontally or vertically to an adjacent square. What is the smallest number of walls that you need to break?

In a file breakwall.py, implement the function find_route that returns the smallest number of walls to break.

def find_route(grid):
    # TODO

if __name__ == "__main__":
    grid = ["########",
            "#*A*...#",
            "#.*****#",
            "#.**.**#",
            "#.*****#",
            "#..*.B.#",
            "########"]
    print(find_route(grid)) # 2

In this labyrinth, you can move one step to the left, four steps down, and four steps to the right. This route has two walls that must be broken.