首页 > 作文

LeetCode130被围绕的区域

更新时间:2023-04-03 20:50:22 阅读: 评论:0

DFS解题思路

做DFS的题目时,要考虑四点要素
1.从哪里开始
2.做什么操作
3.下一步该怎么走
4.什么时间结束
针对这一题从哪里开始是一个很巧妙的问题,题目说明‘o’处在边界上时是不会被X包围的,而且与边界‘o’相连的‘o’也是不会被X包围的,只有那些不与边界‘0’相连的‘0’才能被X包围,所以我们选择开始位置时直接选择第一个在边界上的‘o’,当我们搜索完整所有与边界‘o’相连的‘o’,剩下的‘o’就是被X包围的。第二步,把这个位置的‘o’变为除‘o’,‘X’外的其它字符用来标记这个位置的‘o’是边界‘o’。第三步,对这个‘o’的四周进行遍历来寻找与这个‘o’相连的‘o’,此时要注意边界问题,而且如果周围存在‘#’或者‘X’,不用进行操作,返回空就行,遇到‘o’的话就把这个‘o’更换为其他字符。然后在寻找这个‘o’周围是否有‘o’。第四步,当整个数组遍历完,就结束了。

class Solution { public:    void DFS(vector<vector<char>>& board,int x,int y){         if(x<0||x>=board.size()||y<0||y>=board[0].size()||board[x][y]=='X'||board[x][y]=='#')return ;        board[x][y]='#';        DFS(board,x-1,y);        DFS(board,x+1,y);        DFS(board,x,y-1);        DFS(board,x,y+1);    }    void solve(vector<vector<论语 txt;char>>& board) {         if(b学生手册家长寄语怎么写oard.size()==0)return ;        int捞月亮的人 n=board.size();        int m奇点数=board[0].size();        for(int i=0;i<n;i++){             for(int j=0;j<m;j++){                 bool isEdage=i==0应急救援培训||j==0||i==n-1||j==m-1;                if(isEdage && board[i][j]=='O'){                     DFS(board,i,j);                }            }        }        for(int i=0;i<n;i++){             for(int j=0;j<m;j++){                 if(board[i][j]=='O'){                     board[i][j]='X';                }                if(board[i][j]=='#'){                     board[i][j]='O';                }            }        }    }};

本文地址:https://blog.csdn.net/qq_44111658/article/details/109237529

本文发布于:2023-04-03 20:50:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/73556dd931be0b68b4dbdfd362b062ef.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:LeetCode130被围绕的区域.doc

本文 PDF 下载地址:LeetCode130被围绕的区域.pdf

标签:边界   包围   位置   的人
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图