zoukankan      html  css  js  c++  java
  • CF540C Ice Cave 题解

    Description

    Luogu传送门

    Codeforces传送门

    题目翻译有一点问题,应该是问能否掉进终点

    Solution

    考虑直接 dfs,蒟蒻第一遍写时,是先从搜到起点搜到终点,然后再从终点开始搜,判断能否搜回来,然而…… Time limit exceeded on test 14

    然后我就想为什么会 T,后来我发现搜到终点之后就不用再搜了,直接判断终点的上下左右有没有好冰即可。

    Code

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    int n, m, flag;
    char s[510][510];
    int sx, sy, ex, ey;
    int vis[510][510];
    int dx[4] = {-1, 0, 1, 0};
    int dy[4] = {0, -1, 0, 1};
    
    inline bool judge(int x, int y){
        return x >= 1 && x <= n && y >= 1 && y <= m;
    }
    
    inline int check(int x, int y){//判断 (x, y) 上下左右有没有好冰
        if(vis[x][y] == 2) return 1;//自己就是碎冰,直接 YES
        for(int i = 0; i < 4; ++i){
            int mx = x + dx[i];
            int my = y + dy[i];
            if(judge(mx, my) && !vis[mx][my]) return 1;
        }
        return 0;
    }
    
    inline void dfs(int x, int y){
        if(flag) return;
        if(x == ex && y == ey)//到终点直接判
            return flag = check(x, y), void();
        for(int i = 0; i < 4; ++i){//向 4 个方向搜索
            int mx = x + dx[i];
            int my = y + dy[i];
            if(judge(mx, my) && (!vis[mx][my] || (mx == ex && my == ey))){//没有走过的点 或 终点
                vis[mx][my]++;
                dfs(mx, my);
            }
        }
        return;
    }
    
    int main(){
        scanf("%d%d", &n, &m);
        for(int i = 1; i <= n; ++i){
            scanf("%s", s[i] + 1);
            for(int j = 1; j <= m; ++j)
                vis[i][j] = (s[i][j] == 'X');//把为碎冰的点 vis 初值赋为 1,表示不能走了。
        }
        scanf("%d%d%d%d", &sx, &sy, &ex, &ey);
        dfs(sx, sy);
        puts(flag ? "YES" : "NO");
        return 0;
    }
    

    End

    本文来自博客园,作者:xixike,转载请注明原文链接:https://www.cnblogs.com/xixike/p/15509464.html

  • 相关阅读:
    Different ways how to escape an XML string in C# (zz)
    sql server 中nvarchar(max)性能
    使用 access 的一些限制条件 (zz)
    js 常用属性和方法
    js 常用关键字及方法
    <推荐>35个优秀的电子商务网站界面 (转)
    ASP.NET底层架构 22
    JSON 学习总结(1)
    学习记录
    asp.net原理(总结整理 2)
  • 原文地址:https://www.cnblogs.com/xixike/p/15509464.html
Copyright © 2011-2022 走看看