【Leetcode】 200. 島嶼的個數
阿新 • • 發佈:2018-12-19
給定一個由 '1'
(陸地)和 '0'
(水)組成的的二維網格,計算島嶼的數量。一個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。
示例 1:
輸入:
11110
11010
11000
00000
輸出: 1
示例 2:
輸入:
11000
11000
00100
00011
輸出: 3
本題可以使用深度優先搜尋解答。當遇到一塊陸地‘1’時,可以將島嶼計數器ans+1,然後再將這塊陸地以及與之上下左右相連線的陸地一起挖成水‘0’,即將已計算過的‘1’區域全部標記成‘0’,以免妨礙之後的島嶼計數。
程式碼如下:
void landtowater(char** grid, int row, int col, int rowsize, int colsize){ grid[row][col]='0';//陸地挖成水地 標記已計算的陸地 if(row>0&&grid[row-1][col]=='1'){//向上搜尋 landtowater(grid,row-1,col,rowsize,colsize); } if(row<rowsize-1&&grid[row+1][col]=='1'){//向下搜尋 landtowater(grid,row+1,col,rowsize,colsize); } if(col>0&&grid[row][col-1]=='1'){//向左搜尋 landtowater(grid,row,col-1,rowsize,colsize); } if(col<colsize-1&&grid[row][col+1]=='1'){//向右搜尋 landtowater(grid,row,col+1,rowsize,colsize); } } int numIslands(char** grid, int gridRowSize, int gridColSize) { int ans=0; for(int i=0;i<gridRowSize;i++) for(int j=0;j<gridColSize;j++){ if(grid[i][j]=='1'){ ans++; landtowater(grid,i,j,gridRowSize,gridColSize); } } return ans; }