給定乙個二維的矩陣,包含'x'
和'o'
(字母 o)。
找到所有被'x'
圍繞的區域,並將這些區域裡所有的'o'
用'x'
填充。
示例:
x x x x
x o o x
x x o x
x o x x
執行你的函式後,矩陣變為:
x x x x
x x x x
x x x x
x o x x
解釋:
被圍繞的區間不會存在於邊界上,換句話說,任何邊界上的'o'
都不會被填充為'x'
。 任何不在邊界上,或不與邊界上的'o'
相連的'o'
最終都會被填充為'x'
。如果兩個元素在水平或垂直方向相鄰,則稱它們是「相連」的。
分析與思路:
本題為典型的dfs問題,即搜尋出所有的連通塊,再將連通塊進行填充,但應當注意,連通塊中不應包含在邊界上的元素,因此可將問題轉化。首先搜尋矩陣的上、下、左、右四個邊界,將這四個邊界上的元素'o'的連通塊都填充為'*',然後進行第二輪搜尋,此時無需考慮邊界上'o'的問題,搜尋完畢後,需要將第一輪搜尋填充的'*'還原。因此,**共包含三個dfs函式,分別起排除、正式替換和恢復的作用。
**:
class solution , dy[4] = ;
void dfs(vector>& board, int x, int y)
}void dfs1(vector>& board, int x, int y)
}void dfs2(vector>& board, int x, int y)
}void searchb(vector>& board)
if(board[board.size()-1][i] == 'o')
}for(int i = 0; i < board.size(); i ++)
if(board[i][board[0].size()-1] == 'o') }}
void recoverb(vector>& board)
if(board[board.size()-1][i] == '*')
}for(int i = 0; i < board.size(); i ++)
if(board[i][board[0].size()-1] == '*') }}
void solve(vector>& board)
recoverb(board);
}};
#英語演講比賽已過海選
每日刷題 被圍繞的區域
給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。例 x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x 解釋 被圍繞的區間不會存在...
Leetcode 130 被圍繞的區域 C
給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x解釋 被圍繞的區間不會存在於邊界...
每日打卡 Day17 青蛙的約會 C 實現
兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面為止。可是它們出發之前忘記了一件很重要的事情,既沒有問清楚對方的特徵,也沒有約定見面的具體位置。不過青蛙們都是很樂觀的,它們覺得只要一直朝著某個方向跳下去,總能碰到對...