1. 程式人生 > >Leetcode---島嶼的個數--遞迴

Leetcode---島嶼的個數--遞迴

島嶼的個數

題目連結:島嶼的個數

思路:
  • 本題就是簡單的連通圖個數問題
  • 只需要找出所有連通圖的個數,當一個點為: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); } }