**
航电oj:Red and Black
**
#题目描述
#给你一个图,和起点,求出人能到达的格子的总数
#dfs 求板子题好用 这个dfs 还不用退回
#知识点
dfs算法
#代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char map[22][22];//原数据数组
int vis[22][22];//标记数组 是否走到过
int move[4][2]={0,1,0,-1,-1,0,1,0};//便于移动的数组
int n,m;//行数 列数
int x,y;
int ans = 1;
void dfs(int x,int y)
{
for(int i = 0;i<4 ;i++)
{
int xx = x + move[i][0];//找下一步位置
int yy = y + move[i][1];
///
if(xx>=0&&xx<n&&yy>=0&&yy<m)
{
if(vis[xx][yy] == 0&& map[xx][yy] != '#')
{
vis[xx][yy] = 1;
ans ++;
dfs(xx,yy);
}
}
}
return ;
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
if(n==0 && m == 0)
return 0;
memset(map,'#',sizeof(map));
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
scanf("%s",&map[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(map[i][j] == '@')
{
x = i;y = j;
}
}
}
//for(int i=0;i<n;i++)
//{
// printf(" %s\n",map[i]);
//}
// printf("%d %d\n",x,y);
vis[x][y] = 1;//初始化起点
ans = 1;
dfs(x,y);
printf("%d\n",ans);
}
return 0;
}
#总结
细心点 这样的板子题会好做很多