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;
}

转载于:https://www.cnblogs.com/Chinese-Coder-Clarence/articles/2039269.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值