AcWing 1113. 红与黑
原题链接
简单
作者:
zhaojw_
,
2021-01-28 20:33:18
,
所有人可见
,
阅读 178
#include<iostream>
using namespace std;
char f[100][100];
int n ,m;
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};//按照上右下左方向遍历
int dfs(int x,int y)
{
f[x][y]='#';
int c =1;//计数
for(int i=0;i<4;i++)//判断上右下左四个方向是否还有可以走的格子
{
int a = dx[i]+x,b = dy[i] +y;
if(a<0||a >=n||b <0||b >=m||f[a][b]!='.')continue;
//判断是否撞墙
//撞到上边的墙||撞到下边的墙||撞到左边的墙||撞到右边的墙||要走的下一个方向的格子已经走过
c+=dfs(a,b);//递归并计数
}
return c;
}
int main()
{
while(cin >> m >> n,n||m)//注意样例的6,9代表六列九行
{
int x , y;
for(int i=0; i < n ;i++)
{
for(int j=0;j<m;j++)
{ cin >> f[i][j];
if(f[i][j]=='@')
x=i,y=j;}
}
cout << dfs(x,y) <<endl;
}
}