<style> html, body, .ui-content { background: #222222; color: #00BFFF; } /* 設定 code 模板 */ .markdown-body code, .markdown-body tt { background-color: #ffffff36; } .markdown-body .highlight pre, .markdown-body pre { color: #ddd; background-color: #00000036; } .hljs-tag { color: #ddd; } .token.operator { background-color: transparent; } /* 設定連結 */ a, .open-files-container li.selected a { color: #89FFF8; } a:hover, .open-files-container li.selected a:hover { color: #89FFF890; } </style> ###### tags: `Leetcode` # 1162. As Far from Land as Possible ###### Link : https://leetcode.com/problems/as-far-from-land-as-possible/description/ ## 題目 grid中1為陸地;0為水 找到離陸地最遠的水的距離 ## 程式碼I ```cpp= class Solution { public: int maxDistance(vector<vector<int>>& grid) {//using BFS const int n = grid.size(); queue<pair<int, int>> q; bool allOne = true; for(int i = 0;i < n;++i){//將所有的1放入queue for(int j = 0;j < n;++j){ if(grid[i][j]) q.push({i, j}); else allOne = false; } } if(allOne) return -1;//全都是1回傳-1 int step = 2; while(!q.empty()){//BFS int size = q.size(); for(int i = 0;i < size;++i){ pair<int, int> loc = q.front(); q.pop(); //遇到是0的(還沒走過) 放入queue並更新值 if(loc.first + 1 < n && !grid[loc.first + 1][loc.second]){ grid[loc.first + 1][loc.second] = step; q.push({loc.first + 1, loc.second}); } if(loc.first - 1 >= 0 && !grid[loc.first - 1][loc.second]){ grid[loc.first - 1][loc.second] = step; q.push({loc.first - 1, loc.second}); } if(loc.second + 1 < n && !grid[loc.first][loc.second + 1]){ grid[loc.first][loc.second + 1] = step; q.push({loc.first, loc.second + 1}); } if(loc.second - 1 >= 0 && !grid[loc.first][loc.second - 1]){ grid[loc.first][loc.second - 1] = step; q.push({loc.first, loc.second - 1}); } } ++step; } //如全是0會回傳2 - 3 = -1 符合題目要求 return step - 3; } }; ``` ## Date ### 2023/2/10