题目描述
Java代码
DFS 思路:依次遍历网格;将坐标位置值是 ‘1’ (陆地)的当前位置及其上下左右位置“同化”为 ‘0’ 或其他字符;若当前位置时’0’则退出dfs递归
public int numIslands ( char [ ] [ ] grid) {
if ( grid == null || grid. length == 0 ) return 0 ;
int row = grid. length;
int col = grid[ 0 ] . length;
int result = 0 ;
for ( int i = 0 ; i < row; i++ ) {
for ( int j = 0 ; j < col; j++ ) {
if ( grid[ i] [ j] == '1' ) {
result++ ;
dfs ( grid, i, j, row, col) ;
}
}
}
return result;
}
public void dfs ( char [ ] [ ] grid, int x, int y, int row, int col) {
if ( x < 0 || y < 0 || x >= row || y >= col || grid[ x] [ y] == '0' ) return ;
grid[ x] [ y] = '0' ;
dfs ( grid, x + 1 , y, row, col) ;
dfs ( grid, x - 1 , y, row, col) ;
dfs ( grid, x, y + 1 , row, col) ;
dfs ( grid, x, y - 1 , row, col) ;
}
BFS
public int numIslands ( char [ ] [ ] grid) {
if ( grid == null || grid. length == 0 ) return 0 ;
int row = grid. length;
int col = grid[ 0 ] . length;
int result = 0 ;
for ( int i = 0 ; i < row; i++ ) {
for ( int j = 0 ; j < col; j++ ) {
if ( grid[ i] [ j] == '1' ) {
result++ ;
bfs ( grid, i, j) ;
}
}
}
return result;
}
public void bfs ( char [ ] [ ] grid, int x, int y) {
Queue< int [ ] > q = new LinkedList < > ( ) ;
q. add ( new int [ ] { x, y} ) ;
while ( ! q. isEmpty ( ) ) {
int [ ] cur = q. poll ( ) ;
x = cur[ 0 ] ;
y = cur[ 1 ] ;
if ( 0 <= x && x < grid. length && 0 <= y && y < grid[ 0 ] . length && grid[ x] [ y] == '1' ) {
grid[ x] [ y] = '0' ;
q. add ( new int [ ] { x - 1 , y} ) ;
q. add ( new int [ ] { x + 1 , y} ) ;
q. add ( new int [ ] { x, y - 1 } ) ;
q. add ( new int [ ] { x, y + 1 } ) ;
}
}
}