poj1979
一、题意:一个矩形区域,有H*W个单元格,每个单元格为红色或者黑色,一个人初始在一个黑色单元格上,他可以朝着上下左右四个方向走,但只能走黑色的单元格,求这个人最多可以走多少个单元格
二、思路:简单dfs,遍历即可。
三、源码:
#include"iostream"
#include"stdio.h"
using namespace std;
const int MAXN=25;
char room[MAXN][MAXN];
int n,m,sum;
bool IsEdge(int x,int y)
{
if(x>=0&&x<m&&y>=0&&y<n)
return true;
return false;
}
bool IsBlack(int x,int y)
{
if(room[x][y]=='.')
return true;
return false;
}
void Dfs(int x,int y)
{
int dir[8]={0,-1,0,1,-1,0,1,0};
for(int i=0;i<8;i+=2)
{
int dx=x+dir[i];
int dy=y+dir[i+1];
if(IsEdge(dx,dy)&&IsBlack(dx,dy))
{
sum++;
room[dx][dy]='#';
Dfs(dx,dy);
}
}
}
int main()
{
int sx,sy;
while(cin>>n>>m,n&&m)
{
//input
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>room[i][j];
if(room[i][j]=='@')
{
sx=i;sy=j;
}
}
}
sum=1;
Dfs(sx,sy);
cout<<sum<<endl;
}
return 0;
}

浙公网安备 33010602011771号