0
点赞
收藏
分享

微信扫一扫

Red and Black POJ - 1979

小黑Neo 2022-08-22 阅读 36


题意:@可以到达的点有多少个#看作墙
思路:数据量不大直接dfs,注意将走过的点标记。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
struct d{
int x,y;
}dir[]={{0,1},{0,-1},{1,0},{-1,0}};
int count,n,m;
bool vis[21][21];
char point[21][21];

void dfs(int x,int y)//当前位置
{
for(int i=0;i<4;i++)
{
int nx=x+dir[i].x;
int ny=y+dir[i].y;
if(nx<0||ny<0||nx>=m||ny>=n) continue;//注意边界
if(point[nx][ny]=='.')
{
count++;
point[nx][ny]='#';//标记
//cout<<"("<<nx<<" "<<ny<<")"<<endl;
dfs(nx,ny);
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
{
int x,y;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>point[i][j];
if(point[i][j]=='@')
point[i][j]='#',x=i,y=j;//注意这个也要标记
}
getchar();
}
count=0;
dfs(x,y);
printf("%d\n",count+1);
}
return 0;
}


举报

相关推荐

0 条评论