2016年7月29日 星期五

C129 油田數(c++)

// c129 有幾處油田,另加印最大處的數量
#include <iostream>
using namespace std;
int di[]={-1,1,0,0,-1,1,-1,1}; //上,下,左,右,左上,左下,右上,右下
int dj[]={0,0,-1,1,-1,-1,1,1};
char a[100][101];
int m,n , cnt;

void dfs(int i, int j)
{
   a[i][j]='*';     ++cnt;
//   cout <<cnt<<'*' << i <<',' << j << endl;

   for(int d=0; d<8; ++d)
   {
      int ni = i+di[d] , nj =  j+dj[d];
      if(ni<0 || ni>=m  || nj<0 || nj>=n  ) continue;
      if( a[ni][nj]=='@') dfs(ni,nj);
   }
   return;
}


int main()
{
  int i,j;
   while(cin >> m >> n)
   {
      if(m==0 && n==0) break; // m列n格, 0 0 結束
      int ans=0, mx=0;
      for(i=0;i<m;++i)
       cin >> a[i];  //第i列: a 是二維,字串可一整列讀入
      for(i=0;i<m;++i)
      {
         for(j=0; j<n; ++j)
         {
            if(a[i][j]=='@')
            {
               cnt=0;
               ++ans;
               dfs(i,j);
               if(cnt>mx) mx=cnt;
            }
         }
      }
      cout << ans <<' ' << mx << endl;   // 加印最大處的數量  原C129沒有
   }
   return 0;
}
/* 輸入資料
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
---- 輸出資料
0 0
1 5
2 2
2 8
*/

0 意見:

張貼留言