HDU ACM 1312解题报告
也是很水的一道题
直接用DFS或BFS搜索即可,甚至不用考虑剪枝
但是题目变量要注意,我就是没注意w和h,结果wa了
做题目一定要仔细
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
#include <iostream>
#include <queue>
using namespace std;
struct node
{
int x,y;
};
int w,h,sx,sy,sum;
int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
char map[25][25];
void BFS()
{
queue<node> q;
node n,p;
n.x = sx;
n.y = sy;
q.push(n);
map[sx][sy] = '#';
while(!q.empty())
{
n = q.front();
q.pop();
//sum++;
for(int i = 0;i < 4;i++)
{
int tx = n.x + dir[i][0];
int ty = n.y + dir[i][1];
//if(tx < 0 || tx >= w || ty < 0 || ty >= h)
//continue;
//if(map[tx][ty] == '#')
//continue;
if(tx >= 0 && tx < h && ty >= 0 && ty < w && map[tx][ty] == '.')
{
sum++;
p.x = tx;
p.y = ty;
q.push(p);
map[tx][ty] = '#';
}
}
}
}
int main()
{
int i,j;
//freopen("1.txt","r",stdin);
while(scanf("%d %d",&w,&h) == 2)
{
if(w == 0 && h == 0)
break;
for(i = 0;i < h;i++)
for(j = 0;j < w;j++)
{
cin >> map[i][j];
if(map[i][j] == '@')
{
sx = i;
sy = j;
}
}
sum = 1;
BFS();
printf("%d\n",sum);
}
return 0;
}