Implement a depth-first search (DFS) algorithm to solve a standard maze or pathfinding problem.
Use a rectangular grid where 0 represents an open cell and 1 represents a blocked cell. Return True if four-directional movement can connect start to end, otherwise return False.
Implement has_path(grid, start, end) with list coordinates in [row, column] format.
def has_path(grid, start, end):