Leetcode---島嶼的個數--遞迴
阿新 • • 發佈:2018-12-05
島嶼的個數
題目連結:島嶼的個數
思路:
- 本題就是簡單的連通圖個數問題
- 只需要找出所有連通圖的個數,當一個點為:1時,只需遞迴擴散到周圍四個點,再額外定義一個visit陣列記錄遍歷過的節點
- 當一個連通圖遍歷完全時,再繼續尋找下一個連通圖,進行計數
程式碼:
public int numIslands(char[][] grid) {
if(grid==null||grid.length==0) {
return 0;
}
int count = 0;
boolean[][] visit = new boolean[grid. length][grid[0].length];
for(int i=0;i<grid.length;i++) {
for(int j=0;j<grid[0].length;j++) {
if(grid[i][j]=='1'&&visit[i][j]==false) {
//呼叫遞迴
findIsland(grid,i,j,visit);
++count;
}
}
}
return count;
}
public void findIsland(char[][] grid,int i,int j,boolean[][] visit) {
visit[i][j] = true;
if(i-1>=0&&grid[i-1][j]=='1'&&visit[i-1][j]==false) {
findIsland(grid,i-1,j,visit);
}
if(i+1<grid.length&&grid[i+1][j]=='1'&&visit[i+1][j]==false) {
findIsland (grid,i+1,j,visit);
}
if(j-1>=0&&grid[i][j-1]=='1'&&visit[i][j-1]==false) {
findIsland(grid,i,j-1,visit);
}
if(j+1<grid[0].length&&grid[i][j+1]=='1'&&visit[i][j+1]==false) {
findIsland(grid,i,j+1,visit);
}
}