130. 被围绕的区域

在这里插入图片描述
方法一:dfs递归

将边界上的O及与其相邻的O标记为1,然后遍历数组,将1改为O,其它的都是X。

class Solution {
private:    
    void dfs(vector<vector<char>>& board,int i,int j){
        if(i>=0 && i<board.size() && j>=0 && j<board[0].size() && board[i][j]=='O'){
            board[i][j]='1';		//访问过的点,将O标记为1
            dfs(board,i-1,j);
            dfs(board,i+1,j);
            dfs(board,i,j-1);
            dfs(board,i,j+1);
        }
    }
public:
    void solve(vector<vector<char>>& board) {
        if(board.empty())
            return ;
        int rows=board.size(),cols=board[0].size();      
        for(int i=0;i<rows;i++){	//将左右边界上的O及与O相连的标记为1
            dfs(board,i,0);
            dfs(board,i,cols-1);
        }
        for(int j=1;j<cols-1;j++){	//将上下边界上的O及与O相连的标记为1
            dfs(board,0,j);
            dfs(board,rows-1,j);
        }       
        for(int i=0;i<rows;i++){	//再次遍历,替换,将1改为0,其它都为X
            for(int j=0;j<cols;j++){
                if(board[i][j]=='1')
                    board[i][j]='O';
                else
                    board[i][j]='X';
            }
        }
    }
};

方法二:bfs 队列

class Solution {
public:
    int dirs[4][2]={{1,0},{-1,0},{0,1},{0,-1}};	//四个搜索方向
    void solve(vector<vector<char>>& board) {
        if(board.empty()) return ;
        int rows=board.size(),cols=board[0].size();
        queue<pair<int,int>> q;		//队列中的元素为pair类型,坐标的x,y
        for(int i=0;i<rows;i++){	//将左右边界上的O的位置入队
            if(board[i][0]=='O')
                q.push({i,0});
            if(board[i][cols-1]=='O')
                q.push({i,cols-1});
        }
        for(int j=1;j<cols-1;j++){	//将上下边界上的O的位置入队
            if(board[0][j]=='O')
                q.push({0,j});
            if(board[rows-1][j]=='O')
                q.push({rows-1,j});
        }
        while(!q.empty()){
            int x=q.front().first,y=q.front().second;
            q.pop();          
            board[x][y]='1';	//遍历到的点标记为1
            for(int i=0;i<4;i++){	//分别向4个方向搜索
                int nx=x+dirs[i][0],ny=y+dirs[i][1];
                if(nx>=0 && nx<rows && ny>=0 && ny<cols && board[nx][ny]=='O')	//符合要求入队
                    q.push({nx,ny});	
            }
        }
        for(int i=0;i<rows;i++){		//再次遍历,替换,将1改为0,其它都为X
            for(int j=0;j<cols;j++){
                if(board[i][j]=='1')
                    board[i][j]='O';
                else
                    board[i][j]='X';
            }
        }
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
three.js是一个用于创建WebGL图形的JavaScript库。要围绕某物体旋转,我们可以使用three.js中的旋转方法和对象来实现。 首先,我们需要创建一个场景(scene)、相机(camera)和渲染器(renderer)。然后,我们可以在场景中添加一个几何体(例如立方体或球体)作为我们要围绕旋转的物体。 接下来,我们可以使用以下代码来设置物体的旋转: ``` var object = new THREE.Object3D(); // 创建一个对象来包含我们的物体 scene.add(object); // 将对象添加到场景中 function animate() { object.rotation.y += 0.01; // 围绕Y轴旋转 renderer.render(scene, camera); // 渲染场景 requestAnimationFrame(animate); // 循环调用 animate() 方法,使物体不断旋转 } animate(); // 开始动画循环 ``` 在这个例子中,我们使用`object.rotation.y`来控制物体绕Y轴旋转。通过修改旋转的角度值,我们可以调整旋转的速度和方向。 最后,我们需要在HTML中创建一个canvas元素来渲染我们的场景。例如: ``` <div id="canvas"></div> <script> // 创建WebGL渲染器,指定渲染器大小为canvas元素的大小 var renderer = new THREE.WebGLRenderer({canvas: document.getElementById('canvas')}); renderer.setSize(window.innerWidth, window.innerHeight); // 创建相机 var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 5; // 创建场景 var scene = new THREE.Scene(); // 添加光源 var light = new THREE.PointLight(0xffffff, 1, 100); light.position.set(0, 0, 5); scene.add(light); // 添加物体和旋转动画 // ... // 开始渲染和动画循环 // ... </script> ``` 通过以上步骤,我们可以使用three.js围绕某物体旋转,并在浏览器中以WebGL图形的形式呈现出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值