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; }