每日打卡 Day9 被圍繞的區域 C 實現

2021-09-19 06:25:32 字數 1553 閱讀 3594

給定乙個二維的矩陣,包含'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 實現

兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面為止。可是它們出發之前忘記了一件很重要的事情,既沒有問清楚對方的特徵,也沒有約定見面的具體位置。不過青蛙們都是很樂觀的,它們覺得只要一直朝著某個方向跳下去,總能碰到對...