ACM PKU Lake Counting http://acm.pku.edu.cn/JudgeOnline/problem?id=2386

虽然是深搜,但是用递归不用队列一样过了,太庆幸了,真是傻人有傻福啊!高兴,呵呵....

#include <iostream>
#include <queue>
using namespace std;

int temp = 0;
int M, N;

char rtg[101][101];
int flag[101][101];

bool situation(int m , int n)
{
if ((flag[m][n]==0)&&(m > 0) && (m <= M ) && (n > 0) && (n <= N))
   return true;
else 
   return false;
}


void sign(int m, int n)
{
if ((rtg[m][n]=='W') && situation(m,n)) 
{
   flag[m][n] = temp ;
  
   sign(m-1,n);
   sign(m-1,n-1);
   sign(m-1,n+1);
  
   sign(m,n-1);
   sign(m,n+1);
  
   sign(m+1,n-1);
   sign(m+1,n);
   sign(m+1,n+1);
}
}


void init (void)
{
int i, j;
for ( i = 1; i <= M ; i++)
   for ( j = 1;j <= N; j++)
    if ((rtg[i][j] == 'W')&&(flag[i][j] == 0))
    {
     temp++;
     // flag[i][j] = temp;
     sign(i,j);
    }
}


int main ()
{

memset(flag,0,sizeof(flag));

cin >> M >> N ;

for (int i = 1; i <= M ; i++)
   for (int j = 1;j <= N ; j++)
   {
    cin >> rtg[i][j];
   }
  
   init();
  
   cout << temp << endl; 
   return 0;
}

posted on 2011-05-06 19:00  _Clarence  阅读(129)  评论(0编辑  收藏  举报

导航