題目描述
若海域由一個主島和一些附屬島嶼組成,海域可由一個n×n的方陣表示,矩陣中的數字表示相應主島或島嶼的海拔:數字1~9表示陸地,數字0表示海洋。
現在A君打算在某個島嶼或主島上探險,他的飛機将會降落在海域坐标為(x, y)的陸地上,請你計算A君降落點所在島嶼或主島的面積有多大,此處将面積定義為滿足4連通的格子有多少個,4連通即為将與A君降落點上下左右相鄰接的陸地均視為同一島嶼或主島。
輸入
輸入一行包含3個整型資料,第一個用于表示海域的總面積,即n行n列(1<=n<=30)的方形區域;後兩個用于表示A君的降落點坐标x和y(1<=x, y <=n)。
輸出
A君降落點所在島嶼或主島的面積。
樣例輸入
3 1 1
1 1 0
2 1 0
0 0 0
5 2 4
0 1 1 5 0
2 2 3 1 1
2 0 0 2 0
0 1 3 1 0
1 0 1 0 0
10 6 8
1 2 1 0 0 0 0 0 2 3
3 0 2 0 1 2 1 0 1 2
4 0 1 0 1 2 3 2 0 1
3 2 0 0 0 1 2 4 0 0
0 0 0 0 0 0 1 5 3 0
0 1 2 1 0 1 5 4 3 0
0 1 2 3 1 3 6 2 1 0
0 0 3 4 8 9 7 5 0 0
0 0 0 3 7 8 6 0 1 2
0 0 0 0 0 0 0 0 1 0
樣例輸出
4
14
38
我的代碼: #include <stdio.h>
#include <stdlib.h>
int a[100][100],sum,n,x,y;
void dfs(x,y)
{
if( a[x][y]!=0)
{
a[x][y]=0;
sum++;
if(y>1) dfs(x,y-1);
if(y<n) dfs(x,y+1);
if(x>1) dfs(x-1,y);
if(x<n) dfs(x+1,y);
}
}
int main(int argc, char *argv[]) {
int i,j;
while (scanf("%d%d%d",&n,&x,&y)!=EOF)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
dfs(x,y);
printf("%d\n",sum);
sum=0;
}
return 0;
}