天天看點

島嶼面積有多大(Dfs)

題目描述

若海域由一個主島和一些附屬島嶼組成,海域可由一個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;

}

繼續閱讀