题目链接:专题学习1 - Virtual Judge (vjudge.net)
题目大意:
在一个W*H地图中有"#"代表的红砖和"."代表的黑砖,其中红砖不能到达,问能到达的砖块数总共有多少个?
思路:
我们用递归的方式从一开始的格子一直向上下左右走,走过的格子标记为'1',只能走'.'的格子,走完以后再统计'1'的格子数即为答案。
代码:
#include<iostream>
#include<cstring>
using namespace std;
typedef long long uu;
char matrix[50][50];
int W,H,i,j,s=0;
void dfs(int x,int y)
{
if(matrix[x][y]!='.'||!((x>=0&&x<H)&&(y>=0&&y<W)))//这个格子不能走
return;
matrix[x][y]='1';//做标记
dfs(x+1,y),dfs(x-1,y),dfs(x,y-1),dfs(x,y+1);//继续走上下左右
}
int main()
{
//freopen("input.txt","r",stdin);
while(1)
{
scanf("%d%d",&W,&H);
if(!W) break;
memset(matrix,0,2500);
for(i=0; i<H; i++) scanf("%s",matrix[i]);
for(i=0; i<H; i++)
for(j=0; j<W; j++)
if(matrix[i][j]=='@')
goto exit;//用break不能退出嵌套循环
exit:
s=0;
matrix[i][j]='.';
dfs(i,j);
for(i=0; i<H; i++)
for(j=0; j<W; j++)
if(matrix[i][j]=='1')
s++;
printf("%d\n",s);
}
}