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