5482. 二维网格图中探测环

2020-08-23  本文已影响0人  来到了没有知识的荒原

5482. 二维网格图中探测环

我用了fx,fy来记录来的坐标,y总用了i ^ 1来判断是不是来的方向,tql%%

我:

class Solution {
public:
    int n,m;
    int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
    vector<vector<bool>>vis;
    vector<vector<char>> grid;
    
    bool dfs(int x,int y,int fx,int fy,int len){
        vis[x][y]=true;
        for(int i=0;i<4;i++){
            int a=x+dx[i],b=y+dy[i];
            if(a>=0 && a<n && b>=0 && b<m && grid[a][b]==grid[x][y]){
                if(a==fx && b==fy)continue;
                if(vis[a][b] && len>=4)return true;
                else if(dfs(a,b,x,y,len+1))return true;
            }
        }
        return false;
    }
    
    bool containsCycle(vector<vector<char>>& _grid) {
        grid=_grid;

        n=grid.size();
        m=grid[0].size();
        
        
        vis=vector<vector<bool>>(n,vector<bool>(m));
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(!vis[i][j] && dfs(i,j,-1,-1,0))return true;
            }
        }
        return false;
    }
};

yxc

class Solution {
public:
    vector<vector<char>> g;
    vector<vector<bool>> st;

    bool containsCycle(vector<vector<char>>& grid) {
        g = grid;
        st = vector<vector<bool>>(g.size(), vector<bool>(g[0].size()));
        for (int i = 0; i < g.size(); i ++ )
            for (int j = 0; j < g[0].size(); j ++ )
                if (!st[i][j] && dfs(i, j,  -1))
                    return true;
        return false;
    }

    int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1};
    bool dfs(int x, int y, int p) {
        st[x][y] = true;
        for (int i = 0; i < 4; i ++ )
            if (i != p) {
                int a = x + dx[i], b = y + dy[i];
                if (a >= 0 && a < g.size() && b >= 0 && b < g[0].size() && g[x][y] == g[a][b]) {
                    if (st[a][b]) return true;
                    if (dfs(a, b, i ^ 1)) return true;
                }
            }
        return false;
    }
};


上一篇下一篇

猜你喜欢

热点阅读