博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]Surrounded Regions
阅读量:4151 次
发布时间:2019-05-25

本文共 2614 字,大约阅读时间需要 8 分钟。

class Solution {public:	vector
> BFS(int curX, int curY, vector
> &board, vector
>& visited, bool& bFilp) { int n = board.size(); int m = board[0].size(); int dir[4][2] = { {0,1}, {0,-1}, {1,0}, {-1,0}}; queue
> q; visited[curX][curY] = true; q.push(make_pair(curX, curY)); vector
> path; while (!q.empty()) { int x = q.front().first; int y = q.front().second; path.push_back(q.front()); q.pop(); for (int i = 0; i < 4; ++i) { int nextX = x+dir[i][0]; int nextY = y+dir[i][1]; if(nextX >= 0 && nextX < n && nextY >= 0 && nextY < m) { if(!visited[nextX][nextY] && board[nextX][nextY] == 'O') { q.push(make_pair(nextX, nextY)); visited[nextX][nextY] = true; } } else bFilp = false; } } return path; } void solve(vector
> &board) { // Start typing your C/C++ solution below // DO NOT write int main() function int n = board.size(); if(n == 0) return; int m = board[0].size(); vector
> visited; visited.resize(n); for(int i = 0; i < n; ++i) visited[i].assign(m, false); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if(!visited[i][j] && board[i][j] == 'O') { bool bFlip = true; vector
> path = BFS(i, j, board, visited, bFlip); if(bFlip) { for (int pIdx = 0; pIdx < path.size(); ++pIdx) board[path[pIdx].first][path[pIdx].second] = 'X'; } } } } }};

second time

class Solution {public:    int dir[4][2] = {
{0,1},{0,-1},{1,0},{-1,0}}; void solveUtil(vector
>& board, vector
>& visited, int ix, int iy, vector
>& curPath, bool& isSurrounded) { int n = board.size(); int m = board[0].size(); queue
> posQ; posQ.push(pair
(ix, iy)); while(!posQ.empty()) { int curX = posQ.front().first; int curY = posQ.front().second; posQ.pop(); if(board[curX][curY] == 'O' && !visited[curX][curY]) { curPath.push_back(pair
(curX, curY)); visited[curX][curY] = true; for(int k = 0; k < 4; ++k) { int newX = curX+dir[k][0]; int newY = curY+dir[k][1]; if(newX < 0 || newX >= n || newY < 0 || newY >= m) isSurrounded = false; else if (!visited[newX][newY]) posQ.push(pair
(newX, newY)); } } } } void solve(vector
> &board) { // Start typing your C/C++ solution below // DO NOT write int main() function int n = board.size(); if(n == 0) return; int m = board[0].size(); vector
> visited(n, vector
(m, false)); for(int i = 0; i < n; ++i) { for(int j = 0; j < m; ++j) { vector
> curPath; bool isSurrounded = true; if(!visited[i][j]) solveUtil(board, visited, i, j, curPath, isSurrounded); if(isSurrounded) { for(int i = 0; i < curPath.size(); ++i) board[curPath[i].first][curPath[i].second] = 'X'; } } } }};

转载地址:http://zhxti.baihongyu.com/

你可能感兴趣的文章
从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小...
查看>>
判断一个整数是否是回文数
查看>>
经典shell面试题整理
查看>>
腾讯的一道面试题—不用除法求数字乘积
查看>>
素数算法
查看>>
java多线程环境单例模式实现详解
查看>>
将一个数插入到有序的数列中,插入后的数列仍然有序
查看>>
在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found
查看>>
万年历
查看>>
作为码农你希望面试官当场指出你错误么?有面试官这样遭到投诉!
查看>>
好多程序员都认为写ppt是很虚的技能,可事实真的是这样么?
查看>>
如果按照代码行数发薪水会怎样?码农:我能刷到公司破产!
查看>>
程序员失误造成服务停用3小时,只得到半月辞退补偿,发帖喊冤
查看>>
码农:很多人称我“技术”,感觉这是不尊重!纠正无果后果断辞职
查看>>
php程序员看过来,这老外是在吐糟你吗?看看你中了几点!
查看>>
为什么说程序员是“培训班出来的”就是鄙视呢?
查看>>
码农吐糟同事:写代码低调点不行么?空格回车键与你有仇吗?
查看>>
阿里p8程序员四年提交6000次代码的确有功,但一次错误让人唏嘘!
查看>>
一道技术问题引起的遐想,最后得出结论技术的本质是多么的朴实!
查看>>
985硕士:非科班自学编程感觉还不如培训班出来的,硕士白读了?
查看>>