NEFU 561 方块计算

题目链接

简单搜索题

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int n,m,sx,sy,ans;
char data[33][33];
bool vis[33][33];
int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
void dfs(int i,int j)
{
    if(vis[i][j]||i<0||j<0||i==n||j==m||data[i][j]!='.') return;
    //printf("%d %d ***\n",i,j);
    vis[i][j]=1;ans++;
    for(int k=0;k<4;k++)
    dfs(i+dir[k][0],j+dir[k][1]);
}
int main()
{
    while(cin>>m>>n&&m&&n)
    {
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            cin>>data[i][j];
            if(data[i][j]=='@')
            {
                sx=i;
                sy=j;
                data[i][j]='.';
            }
        }
        //cout<<sx<<" "<<sy<<endl;
        ans=0;
        dfs(sx,sy);
        cout<<ans<<endl;
    }
    return 0;
}

 

posted @ 2016-12-22 16:10  Ritchie丶  阅读(120)  评论(0编辑  收藏  举报