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

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();}}}

http://www.xdnf.cn/news/3730.html

相关文章:

  • (1)大模型的提示词工程实践技巧---LLM输出配置详解
  • 数字孪生赋能智慧城市:从概念到落地的深度实践
  • 【文献阅读】中国湿地随着保护和修复的反弹
  • DeepSeek眼中的文明印记:金刚经
  • 004 树与二叉树:从原理到实战
  • Baklib赋能企业知识管理数字化转型
  • MCP 协议知识分享指南
  • VS调试技巧
  • 网站即时备份,网站即时备份的方法有哪些
  • 简介QML中的Canvas
  • 机器学习入门-线性回归模型/损失函数/梯度下降
  • 【WZOI】【题解】【质数密度】质数密度题解报告
  • 旋转矩阵公式理解
  • 【云备份】服务端数据管理模块设计与实现
  • 嵌入式 GCC 编译工具链:32 位与 64 位助力高效开发
  • [UVM]UVM中reg_map的作用及多个rem_map的使用案例
  • 【C++篇】类和对象(上)
  • 饱和蒸汽再生数据采集挥发性有机物(VOCs)吸附脱附实验装置
  • Pillow 玩图术:轻松获取图片尺寸和颜色模式
  • 肥胖风险的多类预测——CatBoost模型的89%
  • 《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-用声音合成玩音乐:MATLAB电子琴制作(超级趣味实践版)
  • 用可视化学习逆置法
  • 【Linux】Linux应用开发小经验
  • 信息安全导论 第七章 网络边界防御技术
  • 前端面经-VUE3篇(二)--vue3组件知识(二)依赖注入、异步组件、生命周期、组合式函数、插件
  • piccolo-large-zh-v2 和 bge-m3哪个效果好?
  • 【Mytais系列】SqlSession
  • 经典算法 求解硬币组成问题
  • 【Mytais系列】Select语句执行流程
  • 学习笔记:Qlib 量化投资平台框架 — FOR DEVELOPERS