HDU-1312-Red and Black

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=1312

此题注意n,m 表示到底是行还是列

代码

#include<stdio.h>

#include<string.h>
 
int n,m,cnt;
char s[30][30];
int to[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
 
 
void dfs(int i,int j)
{
    cnt++;
    s[i][j]='#';
    int k;
    for(k=0;k<4;k++)
    {
        int x=i+to[k][0];
        int y=j+to[k][1];
        if(x>=0&&x<n&&y>=0&&y<m&&s[x][y]=='.')
        dfs(x,y);
    }
}
int main(void)
{
    int i,j;
    int fi,fj;
    while(scanf("%d%d",&m,&n)==2&&(n+m))
    {
        getchar();
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                scanf("%c",&s[i][j]);
                if(s[i][j]=='@')
                {
                    fi=i;
                    fj=j;
                }
            }
            getchar();
        }
        cnt=0;
        s[fi][fj]='#';
        dfs(fi,fj);
        printf("%d\n",cnt);
    }
    return 0;
}

 

posted @ 2014-10-05 20:23  立刻行动  阅读(118)  评论(0编辑  收藏  举报