LintCode 섬의 개수

1390 단어 LintCode
제목:
01 행렬을 주어 서로 다른 섬의 개수를 구하다.
0은 바다를 대표하고, 1은 섬을 대표하며, 만약 두 개의 1이 서로 인접한다면 이 두 개의 1은 같은 섬에 속한다.우리는 상하좌우를 인접으로만 고려한다.
예제
행렬:
[
  [1, 1, 0, 0, 0],
  [0, 1, 0, 0, 1],
  [0, 0, 0, 1, 1],
  [0, 0, 0, 0, 0],
  [0, 0, 0, 0, 1]
]

중에는 3 개의 섬이 있다.
생각:
일부 귀속적인 사상을 운용했는데 우선 이중 for순환이 하나하나 행렬을 반복하는 요소이다.
어떤 원소를 1로 찾았을 때 귀속적인 사상을 이용하여 이 원소의 상하좌우, 그것과 인접한true의 상하좌우원소, 인접한...이 원소들은false로 바뀐다
마지막 반환num
코드:
public static int numIslands(boolean[][] grid) {
		// Write your code here
		int num = 0;
		if (grid == null)
			return 0;
		for (int i = 0; i < grid.length; i++) {
			for (int j = 0; j < grid[i].length; j++) {
				if (grid[i][j] == true) {
					num++;
					grid = change(grid, i, j);
				}
			}
		}

		return num;

	}
public static boolean[][] change(boolean[][] grid, int i, int j) {
		//  false
		grid[i][j] = false;

		if (i > 0 && grid[i - 1][j] == true) {
			//  
			grid = change(grid, i - 1, j);
		}
		if (j < grid[i].length - 1 && grid[i][j + 1] == true) {
			//  
			grid = change(grid, i, j + 1);
		}
		if (j > 0 && grid[i][j - 1] == true) {
			//  
			grid = change(grid, i, j - 1);
		}
		if (i < grid.length - 1 && grid[i + 1][j] == true) {
			//  
			grid = change(grid, i + 1, j);
		}

		return grid;
	}

좋은 웹페이지 즐겨찾기