被围绕的区域-LintCode
来源:互联网 发布:金牌网吧奖励软件 编辑:程序博客网 时间:2024/06/06 03:02
给一个二维的矩阵,包含 ‘X’ 和 ‘O’, 找到所有被 ‘X’ 围绕的区域,并用 ‘X’ 填充满。
样例:
给出二维矩阵:
X X X XX O O XX X O XX O X X
把被 ‘X’ 围绕的区域填充之后变为:
X X X XX X X XX X X XX O X X
#ifndef C477_H#define C477_H#include<iostream>#include<vector>#include<map>using namespace std;class Solution {public: /* * @param board: board a 2D board containing 'X' and 'O' * @return: nothing */ void surroundedRegions(vector<vector<char>> &board) { // write your code here if (board.empty()) return; int row = board.size(); int col = board[0].size(); map<int, int> visited; vector<vector<int>> dic{ { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };//方便查找上下左右位置的元素 for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { if (board[i][j] == 'O'&&visited.find(i*col + j) == visited.end())//遍历到所有的“岛” { change(board, visited); //根据visited中的值,改变board中值 build(board, dic, visited, i, j); //构建visited } } } change(board, visited); } //递归遍历,区分出元素位于board边界的情况 void build(vector<vector<char>> &board, vector<vector<int>> dic, map<int, int> &visited, int i, int j) { int row = board.size(); int col = board[0].size(); if (i < 0 || j < 0 || i >= row || j >= col) return; if (board[i][j] == 'X' || visited[i*col + j] == 1||visited[i*col+j]==2) return; if (i == 0 || j == 0 || i == row - 1 || j == col - 1) visited[i*col + j] = 2; else visited[i*col + j] = 1; for (auto c : dic) { int x = i + c[0]; int y = j + c[1]; build(board, dic, visited, x, y); } } //若不存在元素在位于board边界,将visited中保存的位置上的元素都置为'X' void change(vector<vector<char>> &board, map<int, int> &visited) { int row = board.size(); int col = board[0].size(); if (visited.empty()) return; bool isSurrended = false; for (auto c : visited) { if (c.second == 2) { isSurrended = true; break; } } if (!isSurrended) { for (auto c : visited) { board[c.first / col][c.first%col] = 'X'; } } visited.clear(); }};#endif
阅读全文
0 0
- 被围绕的区域-LintCode
- lintcode(477)被围绕的区域
- LintCode 477 被围绕的区域
- 被围绕的区域
- 算法爱好者——被围绕的区域 ? 待解决
- 围绕圆的计算
- 围绕鼠标的文字
- 围绕
- 修改围绕float的文本
- 围绕DOM的三大问题
- 一场围绕U盘发明权的纷争
- QT下围绕QString的数据转换
- 围绕主角的摄像头视角控制
- 围绕新闻的观点聚合是有价值的【新媒体】
- 围绕新闻的观点聚合是有价值的【新媒体】
- 围绕新闻的观点聚合是有价值的【新媒体】
- 围绕新闻的观点聚合是有价值的【新媒体】
- 围绕新闻的观点聚合是有价值的【新媒体】
- [ArcGIS] 空间分析(七) 距离制图
- 【数据结构】串的使用
- java基础学习(一)
- HDU3529-Bomberman
- Noip 提高组 2011 Day2 T2 聪明的质检员 二分法
- 被围绕的区域-LintCode
- Test 2017.10.20
- Oracle RAC相关问题——adding cluster entries toinittab
- Frida官方手册
- opencv中滑动条的创建与使用
- Binary Search:349. Intersection of Two Arrays
- [Android] 经验之谈,别再用Android开发宝AndBase了,以前的一个APP用了之后问题多多
- 牛客网错题总结集(一)
- R语言学习笔记(二)导入数据