题解 | #拜访#

拜访

https://www.nowcoder.com/practice/491828fc7d93459db450b344c2aaaeef

class Solution {
public:
    map<int,int> cnt;
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};
    int countPath(vector<vector<int> >& cityMap, int n, int m) 
    {
        vector<vector<bool>> vis(n,vector<bool>(m, false)); 
        function<void(int,int,int)> dfs = [&](int i, int j, int count)
        {
            for(int a = 0;a < 4;a++)
            {
                int x = dx[a]+i, y = dy[a]+j;
                if(x >= 0 && x < n && y >= 0 && y < m && cityMap[x][y] != -1 && !vis[x][y])
                {
                    if(cityMap[x][y] == 2)  // 到了
                    {
                        cnt[count]++;
                        break;
                    }
                    if(cnt.size() > 0 && count > cnt.begin()->first)
                        break;
                    else
                    {
                        vis[x][y] = true;
                        dfs(x,y,count+1);
                        vis[x][y] = false;
                    }
                }
            }
        };
        for(int i = 0;i < n;i++)
            for(int j = 0;j < m;j++)
                if(cityMap[i][j] == 1)
                    dfs(i, j, 0);
        return cnt.begin()->second;  // 最短路径的数量
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务