当前位置: 首页 > news >正文

130. 被围绕的区域

题目链接:130. 被围绕的区域

思路:使用两遍dfs,第一遍找到可以被替换区域的可进入点并记录,第二遍就从所有的可进入点入手遍历区域内所有点并替换。

这是我的思路,感觉还是挺新颖的(应该很少有人这样想我觉得),算是抛砖引玉了。

class Solution {int[] dx = {0, 0, 1, -1};int[] dy = {1, -1, 0, 0};boolean exit = false;// 判断是否可以退出public void solve(char[][] board) {// 定义一个记录矩阵判断某个点是否被走过int[][] record = new int[board.length][board[0].length];// 用一个数列存所有的可以进入点ArrayList<int[]> list = new ArrayList<>();// 遍历这个矩阵for(int i = 0; i < board.length; i++) {for (int j = 0; j < board[0].length; j++) {// 如果这个点没有被走过,并且是'O',则开始深度优先搜索if (record[i][j] == 0 && board[i][j] == 'O') {// 某个区域的进入点record[i][j] = 1;exit = false;dfsOnlyWalk(board, record, i, j);if(!exit) {list.add(new int[]{i, j});}}}}for(int[] ints : list) {int x = ints[0], y = ints[1];board[x][y] = 'X';dfsOnlyMark(board, record, x, y);}}public void dfsOnlyWalk(char[][] board, int[][] record, int i, int j) {//区域中有点位于边缘if(i == 0 || i == board.length - 1 || j == 0 || j == board[0].length - 1) {exit = true;}for(int k = 0; k < 4; k++) {int xx = i + dx[k];int yy = j + dy[k];if(xx >= 0 && xx < board.length && yy >= 0 && yy < board[0].length && record[xx][yy] == 0 && board[xx][yy] == 'O') {record[xx][yy] = 1;dfsOnlyWalk(board, record, xx, yy);}}}public void dfsOnlyMark(char[][] board, int[][] record, int i, int j) {for(int k = 0; k < 4; k++) {int xx = i + dx[k];int yy = j + dy[k];if(xx >= 0 && xx < board.length && yy >= 0 && yy < board[0].length && board[xx][yy] == 'O') {board[xx][yy] = 'X';dfsOnlyMark(board, record, xx, yy);}}}public static void main(String[] args) {Solution solution = new Solution();/** [["O","X","O","O","X","X"],["O","X","X","X","O","X"],["X","O","O","X","O","O"],["X","O","X","X","X","X"],["O","O","X","O","X","X"],["X","X","O","O","O","O"]]* */char[][] board = {{'O','X','O','O','X','X'},{'O','X','X','X','O','X'},{'X','O','O','X','O','O'},{'X','O','X','X','X','X'},{'O','O','X','O','X','X'},{'X','X','O','O','O','O'}};solution.solve(board);for(char[] chars : board) {for(char c : chars) {System.out.print(c + " ");}System.out.println();}}}

相关文章:

  • 使用DeepSeek协助恢复历史数据
  • 介绍一下HSLA的颜色相关知识
  • 一篇文章看懂时间同步服务
  • PyTorch_阿达玛积
  • AI 与生物技术的融合:开启精准医疗的新纪元
  • GTS-400 系列运动控制器板(十四)----软限位使用
  • 【WZOI】【题解】【质数密度】质数密度题解报告
  • Java通用Mapper自定义方法
  • 深入解析 Stacking:集成学习的“超级英雄联盟
  • 源码编译Qt StateMachine
  • Java快速上手之实验六
  • Nginx — 防盗链配置
  • PowerShell安装Chocolatey
  • 山东大学离散数学第十章习题解析
  • neatchat轻量级丝滑的ai模型web客户端
  • 使用Node.js搭建https服务器
  • 动态库与ELF加载
  • 白皮解读:数据流通关键技术白皮书【附全文阅读】
  • 【KWDB 创作者计划】_KWDB事务管理模块实现原理
  • Three.js支持模型格式区别、建议
  • 广西科学调度保障春灌面积1373.53万亩
  • 政府效率部效果不佳?马斯克有意寻求支持,含糊表态部门未来
  • 特朗普称将禁止伊朗石油买家与美国做生意
  • 视频丨英伟达总裁黄仁勋:美勿幻想AI领域速胜中国
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 关于新冠疫情防控与病毒溯源的中方行动和立场