题意:一个地图,求从起点开始,可以到达的点的个数,其中有墙阻隔,默认有边界。
题解:DFS,从起点开始,先替换这个点使之成为墙,然后四个方向进行搜索,知道没有点为止。
注意:在输入地图时,应该注意加一个为止存放’\n’,所以第二层for要+1宽度;还有在输入地图规格时候注意加上getchar,以免后面混乱
(当输入的是数字地图时候,不需要加宽)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define pr(x) cout<<#x<<" "<<x;
#define pl(x) cout<<#x<<" "<<x<<endl;
using namespace std;
char maze[30][30];
int ans=0;
int dx[] = {0,0,-1,1};
int dy[] = {-1,1,0,0};
int H,L;
void dfs(int x,int y){
maze[x][y]='#';
ans++;
for(int i = 0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
// pl(maze[nx][ny]);
if(nx<L&&nx>=0&&ny<H&&ny>=0&&maze[nx][ny]=='.')
{
dfs(nx,ny);
}
}
}
int main(){
while(1){
int x,y;
scanf("%d %d",&L,&H);
getchar();
if(H==0){return 0;}
for(int i = 0; i<H; i++){
for(int j = 0; j<L+1; j++){
scanf("%c",&maze[j][i]);
if(maze[j][i]=='@'){
x=j;
y=i;
}
}
}
dfs(x,y);
printf("%d\n",ans);
ans=0;
}
}