HDU 1312 Red and Black

版权声明:最终解释权归属Hern所有,恒! https://blog.csdn.net/qq_36761831/article/details/79947031

题意:根据地图,问可以到达多少地方.'@'为起点, ' . '为路,可以到达, ' # '为墙,不能通过.

思路:简单题,既可以用深搜,也可以用广搜,广搜是可以用C++里的queue,如果是C的话也可以实现其功能,其实也没有多复杂.

注意:输入的两个数,第一个是列数,第二个是行数!!!

还有一个小技巧,搜索过的地方可以用'#'标记!

#include <iostream>
#include <cstring>
#include <cmath>

using namespace std;

#define N 21

char W[N][N];//记录标点符号
int flag[N][N];//判断是否用过
int A, B;//行数和列数
int sum;//统计能走多少个
int x, y;//记录@出现的坐标x和y
int xy[4][2] = {-1,0,1,0,0,1,0,-1};//北、东、西、南 方向
void  DFS(int i, int j)
{
    flag[i][j] = 1;
    for(int k = 0; k < 4; k++){
        int a = i + xy[i][0];
        int b = j + xy[i][1];
        if( (0 <= a) && (0 <= b) && (a <= A) && (b <= B) &&(!flag[a][b]) && (W[a][b] == '.') )
        {
            ++sum;
            DFS(a,b);
        }
    }
}

int main()
{
    cin>>A>>B;
    for(int i = 1; i <= A; i++){
        for(int j = 1; j <= B; j++){
            cin>>W[i][j];
            if(W[i][j] == '@'){
                x = i;
                y = j;
            }
        }
    }
    memset(flag,0,sizeof(flag));
    sum = 1;
    DFS(x, y);

    cout<<sum<<endl;

    return 0;
}

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页