想要走到终点(n-1,m-1),那么必须先走到它的上面(n-2,m-1)或者左边(n-1,m-2);同理可知,走到任意一点(x,y),都必须可以走到这一点的上面或者左边,才能保证一定能走到终点。既然通向终点(n-1,m-1)路径上的点都必须首先它的上边或者左边,那么从起点到终点一定存在一条向右或向下走的路径,并且路径长度最短恒为m+n-2。

public:
    int floodFill(vector<vector<int> > map, int n, int m) {
        // write code here
        return m+n-2;
    }
};