【发布时间】:2015-07-02 16:38:46
【问题描述】:
我正在尝试解决这个问题:
给定一个由“1”(陆地)和“0”(水)组成的二维网格图,计算岛屿的数量。岛屿四面环水,由相邻陆地水平或垂直连接而成。您可以假设网格的所有四个边缘都被水包围。
示例 1:
11110
11010
11000
00000
我的解决办法是:
#include <iostream>
#include <cstdlib>
#define N 5
#define M 4
using namespace std;
int a[5][4] =
{
1,1,1,1,0,
1,1,0,1,0,
1,1,0,0,0,
0,0,0,0,0
};
int counter = 0;
void dfs(int i, int j)
{
a[i][j] = 0 ;
if (i - 1 >= 0) dfs(i - 1, j);
if (i + 1<M) dfs(i + 1, j);
if (j - 1 >= 0) dfs(i, j - 1);
if (j + 1<N) dfs(i, j + 1);
}
int main()
{
int i = 0, j = 0;
for (; i < M; i++)
{
for (j = 0; j < N; j++)
{
if (a[i][j] != 0) {
dfs(i, j);
counter++;
}
}
}
cout <<"No. Of Islands: "<<counter<< endl;
}
此解决方案在 Visua Studio 中显示异常。调用 dfs 函数时看不到哪里出错了。
【问题讨论】:
-
没有问题。
-
a[5][4]-->a[4][5]?还有i < M.. j<N(M:10, N:10)?? -
@iharob 请查看编辑。
-
@BLUEPIXY 你能解释一下吗。我完全糊涂了。
-
这段代码无论如何都不会像你期望的那样,计数器最后总是等于
M*N。