1.题目:岛问题
一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?
举例:
0 0 1 0 1 0
1 1 1 0 1 0
1 0 0 1 0 0
0 0 0 0 0 0
这个矩阵中有三个岛。
思路:
建立一个感染函数,先遍历矩阵,如果发现有为一的地方则调用感染函数,递归进行上下左右的搜索,并把周围为相连为1的地方标记为2,知道搜索到不为1或者越界不在进行递归。
#define width 6
#define height 6
void Infect(int arr[width][height], int i, int j)//i行 j列
{
if (i < 0 || i >= width || j < 0 || j >= height||arr[i][j]!=1)
return;
arr[i][j] = 2;
Infect(arr, i - 1, j);//上下左右;
Infect(arr, i + 1, j);
Infect(arr, i, j + 1);
Infect(arr, i, j - 1);
}
int GetNum(int arr[width][height])
{
int num = 0;
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
if (arr[i][j] == 1)
num++;
Infect(arr, i, j);
}
}
return num;
}