虽然是深搜,但是用递归不用队列一样过了,太庆幸了,真是傻人有傻福啊!高兴,呵呵....
#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;
}