leetcode--200. 岛屿的个数
生活随笔
收集整理的這篇文章主要介紹了
leetcode--200. 岛屿的个数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個由?'1'(陸地)和?'0'(水)組成的的二維網格,計算島嶼的數量。一個島被水包圍,并且它是通過水平方向或垂直方向上相鄰的陸地連接而成的。你可以假設網格的四個邊均被水包圍。
示例 1:
輸入: 11110 11010 11000 00000輸出:?1示例?2:
輸入: 11000 11000 00100 00011輸出: 3第一版:
其實是對的!!但是因為我把vis數組的賦值括號寫成了{}導致一直出錯。。。 枯了!
這種錯誤!!!!!
class Solution { int d[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}}; //方向數組public:int numIslands(vector<vector<char>>& grid) {if (grid.empty()) return 0;int count = 0;//訪問數組int row = grid.size();int col = grid[0].size();vector<vector<bool>> vis(row, vector<bool>(col,false));for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){if(vis[i][j] == false && grid[i][j] == '1') //沒有被訪問過,進行深搜{dfs(i,j,grid,vis);count++;} }} return count;}void dfs(int x, int y, vector<vector<char>>& grid, vector<vector<bool>>& vis){int r = grid.size();int c = grid[0].size();if(x < 0 || x >= r || y < 0 || y >= c || grid[x][y] == '0' || vis[x][y] == true) return;vis[x][y] = true;for(int i = 0; i < 4; i++){int dx = x + d[i][0];int dy = y + d[i][1];dfs(dx,dy,grid,vis);}} };?
我的 錯誤代碼:
原因:廣搜的數據量太大,導致溢出了。只過了14個點,還有就是,要記得空數組的判別
更新:也是對的,也是因為括號的原因....(佛)
class Solution { int d[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}}; //方向數組int count = 0;struct node{int x, y;}Node;public:int numIslands(vector<vector<char>>& grid) {if(grid.empty() || grid[0].empty()) return 0;//訪問數組int row = grid.size();int col = grid[0].size();vector<vector<bool>> vis(row, vector<bool>(col,false));for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){if(grid[i][j] == '1' && vis[i][j] == false){count++;bfs(i,j,grid,vis);}}}return count;}bool judge(int x, int y, vector<vector<char>>& grid, vector<vector<bool>>& vis){int r = grid.size();int c = grid[0].size();if(x < 0 || x >= r || y < 0 || y >= c) return false;if(grid[x][y] == '0' || vis[x][y] == true) return false;return true;}void bfs(int x, int y, vector<vector<char>>& grid, vector<vector<bool>>& vis){queue<node> Q;Node.x = x, Node.y = y;Q.push(Node);vis[x][y] = true;while(!Q.empty()){node top = Q.front();Q.pop();for(int i = 0; i < 4; i++){int dx = top.x + d[i][0];int dy= top.y + d[i][1];if(judge(dx,dy,grid,vis)){Node.x = dx, Node.y = dy;Q.push(Node);vis[dx][dy] = true;}}}} };?
大佬:cannon
?
class Solution {private:int d[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int m, n;vector<vector<bool>> visited;bool inArea(int x, int y){return x >= 0 && x < m && y >= 0 && y < n;}// 從grid[x][y]的位置開始,進行floodfill// 保證(x,y)合法,且grid[x][y]是沒有被訪問過的陸地void dfs(vector<vector<char>>& grid, int x, int y){//assert(inArea(x,y));visited[x][y] = true;for(int i = 0; i < 4; i ++){int newx = x + d[i][0];int newy = y + d[i][1];if(inArea(newx, newy) && !visited[newx][newy] && grid[newx][newy] == '1')dfs(grid, newx, newy);}return;}public:int numIslands(vector<vector<char>>& grid) {m = grid.size();if(m == 0)return 0;n = grid[0].size();if(n == 0)return 0;for(int i = 0 ; i < m ; i ++)visited.push_back(vector<bool>(n, false));int res = 0;for(int i = 0 ; i < m ; i ++)for(int j = 0 ; j < n ; j ++)if(grid[i][j] == '1' && !visited[i][j]){dfs(grid, i, j);res ++;}return res;} };?
總結
以上是生活随笔為你收集整理的leetcode--200. 岛屿的个数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode--133. 克隆图
- 下一篇: leetcode--207. 课程表