图的表示方式
- 邻接表
- 邻接矩阵
稀疏图适合用邻接表,稠密图适合用邻接矩阵
岛屿数量【LC 200题】
一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右 四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛? 【举例】 001010 111010 100100 000000 这个矩阵中有三个岛
public class NumIslands {
public int numIslands(char[][] grid) {
if (grid==null) return 0;
int res=0;
int N=grid.length;
int M=grid[0].length;
for (int i=0;i<N;i++){
for (int j=0;j<M;j++){
if (grid[i][j]=='1'){
res++;
infect(grid,i,j,N,M);
}
}
}
return res;
}
private void infect(char[][] grid, int i, int j, int N, int M) {
//我只关心这个1能在我和我的周围传递下去,如果不能就直接返回
// 注意这个判断条件 不等于1 也传递不下去了 不要忘了
if (i<0 || i>=N || j<0 || j>=M || grid[i][j]!='1') return;
grid[i][j]='0';
infect(grid,i+1,j,N,M);
infect(grid,i,j+1,N,M);
infect(grid,i-1,j,N,M);
infect(grid,i,j-1,N,M);
}
}
大约 10 分钟