/*宝岛探险:深度优化算法解答*/
#include<stdio.h>
int a[51][51];
int book[51][51];
int n, m, sum;
void dfs(int x, int y)
{
int k, tx, ty;
//定义一个方向数组
int next[4][2] = { { 0, 1 },//向右走
{ 1, 0 },//向下走
{ 0, -1 },//向左走
{ -1, 0 } };//向上走
//枚举四个方向
for (k = 0; k<4; k++)
{
//计算下一步的坐标
tx = x + next[k][0];
ty = y + next[k][1];
//判断是否越界
if (tx<1 || tx>n || ty<1 || ty>m)
continue;
//判断是否是陆地
if (a[tx][ty]>0 && book[tx][ty] == 0)
{
sum++;
book[tx][ty] = 1;//标记这个点已经走过
dfs(tx, ty);//开始尝试下一个点
}
}
return;
}
int main()
{
int i, j, startx, starty;
scanf_s("%d %d %d %d", &n, &m, &startx, &starty);
//读入地图
for (i = 1; i<=n; i++)
for (j = 1; j<=m; j++)
scanf_s("%d", &a[i][j]);
book[startx][starty] = 1;
sum = 1;
//从降落的位置开始
dfs(startx, starty);
//最后输出岛屿的大小
printf("%d\n", sum);
getchar(); getchar();
return 0;
}