题解 | #机器人的运动范围#

机器人的运动范围

http://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8

/* //方法一,深度优先遍历 class Solution { public: int movingCount(int threshold, int rows, int cols) { static int count=0; vector<vector> matrix(rows); //0为没走过,-1为走不了,1为走过了 for(int i=0;i<rows;i++) { matrix[i].resize(cols); for(int j=0;j<cols;j++) matrix[i][j]=0; } DFS(matrix,threshold,0,0,rows,cols,count); return count; }

//采用深度优先遍历
void DFS(vector<vector<int>> &matrix,int threshold,int i,int j,int rows,int cols,int &count)
{
    if(i<0||i>=rows||j<0||j>=cols)  //超出界限
        return;
    int m1=i/10;
    int m2=i%10;
    int n1=j/10;
    int n2=j%10;
    if(matrix[i][j]==1)  //已访问过,不再访问
        return;
    else if(matrix[i][j]==-1)  //走不通
        return;
    else if(m1+m2+n1+n2<=threshold&&matrix[i][j]==0)  //未访问又走得通的
    {
        count++;
        matrix[i][j]=1;
        DFS(matrix,threshold,i,j+1,rows,cols,count);
        DFS(matrix,threshold,i,j-1,rows,cols,count);
        DFS(matrix,threshold,i-1,j,rows,cols,count);
        DFS(matrix,threshold,i+1,j,rows,cols,count);
        return;
     }
    else
    {
        matrix[i][j]=-1;  //未访问又走不通的,方格内值置为-1
        return;
    }
}

}; */

//方法二,广度优先遍历 class Solution { public: struct NODE{ int x,y; }; int movingCount(int threshold, int rows, int cols) { int count=0; vector<vector> matrix(rows); //0为没走过,-1为走不了和为走过了 for(int i=0;i<rows;i++) { matrix[i].resize(cols); for(int j=0;j<cols;j++) matrix[i][j]=0; } int X[4]={0,0,1,-1}; int Y[4]={1,-1,0,0}; NODE node={0,0}; queue q; q.push(node); matrix[0][0]=-1; while(!q.empty()) { node=q.front(); q.pop(); count++; for(int i=0;i<4;i++) { int nodex=node.x+X[i]; int nodey=node.y+Y[i]; if(nodex<0||nodex>=rows||nodey<0||nodey>=cols) continue; if(matrix[nodex][nodey]==-1) continue; else if(getsum(nodex,nodey)>threshold) matrix[nodex][nodey]=-1; else { NODE now; now.x=nodex; now.y=nodey; q.push(now); matrix[nodex][nodey]=-1; } } } return count; }

int getsum(int i,int j )
{
    int m1=i/10;
    int m2=i%10;
    int n1=j/10;
    int n2=j%10;
    return m1+m2+n1+n2;
}

};

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 15:46
已编辑
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
头像
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务