HDU 1241 Oil Deposits
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1241
大意:计算图中有几大块@
#include <iostream>
#include <queue>
using namespace std;
struct point
{
int x, y;
};
char g[111][111];
int xx[8] = {1,1,1,0,0,-1,-1,-1};
int yy[8] = {1,0,-1,1,-1,1,0,-1};
int sum;
int n, m;
void Bfs(int x, int y)//广搜目的:把该块@全去掉。。
{
point q1, q2;
queue <point> Q;
int i;
sum++;
q1.x = x;
q1.y = y;
Q.push(q1);
while (!Q.empty())
{
q2 = Q.front();
Q.pop();
g[q2.x][q2.y] = 0;
for (i = 0; i < 8; i++)
{
q1.x = q2.x + xx[i];
q1.y = q2.y + yy[i];
if (q1.x >=0 && q1.y >=0 && q1.x < n && q1.y < m && g[q1.x][q1.y] == '@')
{
Q.push(q1);
g[q1.x][q1.y] = 0;
}
}
}
}
int main()
{
int i, j;
int x, y;
while (~scanf("%d", &n), n)
{
scanf("%d", &m);
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf(" %c" ,&g[i][j]);
}
}
sum = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (g[i][j] == '@')
{
Bfs(i, j);
}
}
}
printf("%d\n", sum);
}
return 0;
}
posted on 2012-04-03 15:55 [S*I]SImMon_WCG______* 阅读(178) 评论(0) 编辑 收藏 举报