题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312
题目大意:给出一张地图,如果是“.”则可通行,若为“#”不能通行,“@”为起点,求能走过的点的个数(@也算)
解题思路:dfs,但一定要记得在访问之后修改地图的状态,否则会反复访问,陷入死循环,第一次就这样搞坏了…………
AC代码:
#include <iostream>
using namespace std;
char map[25][25];
int dir[4][2] = {0,1,-1,0,0,-1,1,0};
int cnt;
int w,h;
void dfs(int x,int y)
{
cnt++;
map[x][y] = '#';
// cout<<cnt<<endl;
// int nx,ny;
for(int i=0;i<4;i++)
{
int nx = x+dir[i][0];
int ny = y+dir[i][1];
// cout<<"xy"<<x<<" "<<y<<endl;
// cout<<"nxny"<<nx<<" "<<ny<<endl;
// cout<<map[nx][ny]<<endl;
if(map[nx][ny]=='.'&&nx>=0&&nx<h&&ny>=0&&ny<w)
{
dfs(nx,ny);
}
}
return;
}
int main()
{
int x,y;
while(cin>>w>>h)
{
cnt=0;
if(w==0&&h==0)break;
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{
x = i;
y = j;
}
}
}
dfs(x,y);
cout<<cnt<<endl;
}
return 0;
}