题目大意:给出一个矩形红地板和黑地板的分布情况,问最多能走多少块黑地板,不能走和跨过红地板。
解题思路:直接就是DFS,三天不写手生呀,一个getchar弄了我半天。还是比较简单的,就不赘述了,详见code。
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1312
code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 20+2;
char map[MAXN][MAXN];
int n,m,sx,sy,ans;
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
void dfs(int x,int y){
ans++;
map[x][y]='#';
for(int i=0;i<4;i++){
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(tx>=0 && tx<n && ty>=0 && ty<m && map[tx][ty]=='.')
dfs(tx,ty);
}
}
int main(){
//freopen("input.txt","r",stdin);
while(scanf("%d%d",&m,&n)!=EOF && (n||m)){
getchar();
memset(map,0,sizeof(map));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%c",&map[i][j]);
if(map[i][j]=='@'){sx=i;sy=j;}
}
getchar();
}
ans=0;
dfs(sx,sy);
printf("%d\n",ans);
}
return 0;
}