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

  

原文地址:https://www.cnblogs.com/acm-jing/p/9538899.html