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

  • 相关阅读:
    reuire代码优化之:r.js
    项目伪模块化开发之:requirejs(AMD)开发
    cookie
    前端构建工具gulpjs的使用介绍及技巧
    js之:漂浮线
    同步对象(Event)
    并发&并行 同步&异步 GIL 任务 同步锁 死锁 递归锁
    进程 线程 threading模块
    认证客户端的链接合法性
    socketserver 模块的构成
  • 原文地址:https://www.cnblogs.com/xixike/p/15509464.html
Copyright © 2011-2022 走看看