一道很简单的搜索入门题
题目大意是指把一个广场分为红黑两种颜色的砖,人只能在黑砖上移动,给你一个起点,问你最多能走多少块黑砖。
#include<iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int cont, m, n, sx,sy;
char maze[21][21];
int xm[4]={1,0,-1,0},ym[4]={0,1,0,-1};
void dfs(int x, int y)
{
int tx, ty, j;
cont++;
for(int i=0;i<4;i++)
{
tx=x+xm[i];ty=y+ym[i];
if(tx<0||tx>=n||ty<0||ty>=m||maze[tx][ty]=='#')
continue;
maze[tx][ty]='#';
dfs(tx,ty);
}
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF&&m&&n)
{
cont=0;
for(int i=0;i<n;i++)
{
getchar();
for(int j=0;j<m;j++)
{
scanf("%c",&maze[i][j]);
if(maze[i][j]=='@')
{
sx=i;sy=j;
}
}
}
maze[sx][sy]='#';
dfs(sx,sy);
printf("%d\n",cont);
}
return 0;
}