搜索—Problem_1016-Red and Black

搜索—Problem_1016-Red and Black
题意
简单概括,给一幅图,算出有从起点出发最多能走多少步。
解题思路
用DFS。从@开始所有向四个方向走,查看。的数量,当走到边界返回,碰到#返回。
感想
算是水题吧,其实DFS和BFS都可以。
AC代码

#include <stdio.h>
#include <string.h>

int n,m,cnt;
char map[30][30];
int to[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};

void dfs(int i,int j)
{
    cnt++;
    map[i][j] = '#';
    for(int k = 0; k<4; k++)
    {
        int x = i+to[k][0];
        int y = j+to[k][1];
        if(x<n && y<m && x>=0 && y>=0 && map[x][y] == '.')
            dfs(x,y);
    }
    return;
}

int main()
{
    int i,j,fi,fj;
    while(~scanf("%d%d%*c",&m,&n))
    {
        if(m == 0 && n == 0)
            break;
        for(i = 0; i<n; i++)
        {
            for(j = 0; j<m; j++)
            {
                scanf("%c",&map[i][j]);
                if(map[i][j] == '@')
                {
                    fi = i;
                    fj = j;
                }
            }
            getchar();
        }
        cnt = 0;
        //map[i][j] = '#';
        dfs(fi,fj);
        printf("%d\n",cnt);
    }

    return 0;
}

你可能感兴趣的:(搜索—Problem_1016-Red and Black)