在算法題解中,LeetCode 130「被圍繞的區域」 是一道經典的矩陣搜索問題,主要考察深度優先搜索(DFS)的應用。本題要求將矩陣中被字符 'X' 完全包圍的 'O' 區域替換為 'X',但需保留與邊界相連的 'O'。以下從問題分析、解題思路、代碼實現到復雜度解析,全面拆解此題。\n\n## 問題剖析\n輸入為一個 m x n 的矩陣 board,由 'X' 和 'O' 組成。規則是:任何不在邊界上且不與邊界 'O' 相連的 'O',都會被替換為 'X'。通俗地講,只有活在疆域之內(未被邊界連通)的 'O' 才需要被蠶食。\n\n## 解題思路:從邊界下手逆向標記\n直接判斷內部 'O' 是否相連困難,高效方法是從邊界的 'O' 出發,標記所有可達的 'O'。這些標記的區域是安全的(不會被替換),而未被標記的 'O' 則陷入包圍,應改為 'X'。這個過程分可分為三步:\n\n### 步驟一:以邊界點激發 DFS\n遍掃矩陣四條邊界線上遇到 'O' 的位置。每個數組元素用 DFS 將自己和相鄰的縱向/橫向為 'O' 的位置,全部臨時標記(比如將該方格置為 '#'),這是在模擬從彼岸切入搜尋活路徑。\n\n### 步驟二:全面重設元素\n遍歷整個矩陣,逐一檢閱:若當前元素還是原始 'O'并且在前一步操作后任是 'O'(沒有被邊界著陸觸達),顯示出它是孤立無援的死區,直接將轉變填入字母 替換時進行重新賦值操作(改寫成'X')同時補讀:而對于曾經改成 '#' '待審的忠臣點們恢復原狀再轉化化為原來寫的始坐標采用 -}\n主要碼用于覆蓋 (先將兩類分開快速過一輪規則之后再校對):\n修復手撫把目前全部的 哈希代替權\