矩阵中相邻的1组成一个岛,求一个矩阵中岛的个数:
例如:下面矩阵岛数为4
0, 0, 1, 0, 1, 0,
1, 1, 1, 0, 1, 0
1, 0, 0, 1, 0, 0
0, 0, 0, 0, 1, 1
TIPS:
代码:感染过程用递归法进行实现
二维数组指针int(*p)[] 需要打括号,int *p[]表示指针类型的数组
参考左神代码编写:
#includeusing namespace std; void infect(int (*p)[6], int i, int j, int hang, int lie) { if (i < 0 || j < 0 || i >= hang || j >= lie || p[i][j] != 1) //返回条件 { return; } p[i][j] = 2; //将值为1的点改为2 infect(p, i - 1, j, hang, lie); //在左右上下方向上进行感染 infect(p, i + 1, j, hang, lie); infect(p, i, j - 1, hang, lie); infect(p, i, j + 1, hang, lie); } int Island_count(int (*p)[6], int hang, int lie) { if (p == nullptr || p[0] == NULL) { return 0; } int count = 0; //记录岛个数 for (int i = 0; i < hang; ++i) { for (int j = 0; j < lie; ++j) { if (p[i][j] == 1) //找到为1的点后进行感染F { ++count; infect(p, i, j, hang, lie); } } } return count; } int main() { int arr[4][6] = {{0, 0, 1, 0, 1, 0}, {1, 1, 1, 0, 1, 0}, {1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 1}}; int all = sizeof(arr) / sizeof(int); //总长度 int lie = sizeof(arr[0]) / sizeof(int); //行数 int hang = all / lie; //列数 int count = Island_count(arr, hang, lie); cout << "岛的个数为:" << count << endl; return 0; }
结果:



