zoukankan      html  css  js  c++  java
  • 宁波工程学院2020新生校赛G

    链接:https://ac.nowcoder.com/acm/contest/6106/G
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    64bit IO Format: %lld

    题目描述

    为了寻找稀有的宝可梦,小梁进了一个古代遗迹中。在一次意外的触发之下,她复活了超古代宝可梦化石翼龙并激怒了对方,现在化石翼龙准备攻击小梁,她要逃离这个遗迹了。
    但化石翼龙的实力过于强大,让这个本就历经风霜的遗迹开始了毁灭性的崩塌,有大量的落石下落,现在我们要帮助小梁逃离这个遗迹。
    遗迹是一个N x M 的矩阵,g表示该遗迹的出口;s表示小梁所处位置;现在遗迹中有大量落石正在下落。因为小梁不能翻越这些落石,所以必须绕开,同时小梁只能走上下左右4个方向。
    现在小梁要开始逃亡了,那么小梁可以顺利逃出遗迹吗?

    输入描述:

    第一行两个整数 N, M(1≤N,M≤500)
    输入一个 N×M的矩阵:
    .表示道路;
    #表示落石的位置;
    s表小梁所处位置;
    g表遗迹的出口 。

    输出描述:

    如果小梁能顺利逃出遗迹则输出 “Yes”,反之输出 “No”(不包括引号)。
    示例1
    输入
    10 10
    s…
    #########.
    #…#.
    #…####.#.
    ##.##.#.#.
    ##.##.#.#.
    g…#.#.#.
    #.#.#.#.#.
    #.#.#.#.#.
    #…#…
    输出
    Yes

    题目大意:

    给出一个地图,#不能走,询问是否能从s走到g,能输出yes,不能输出no

    解题思路:

    基础搜索,我用的BFS,设一个标记数组结合搜索的模板即可AC:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <stack>
    #include <queue>
    using namespace std;
    const int _max=550;
    char mp[_max][_max];
    bool book[_max][_max];
    int dir[][2]={1,0,-1,0,0,1,0,-1};
    bool flag;
    int n,m,xx,yy;
    struct node{int x,y; };
    void bfs()//bfs模板
    {
        memset(book,false,sizeof book);
        queue<node >q;
        q.push(node({xx,yy}));
        while(!q.empty())
        {
            auto t=q.front();
            if(mp[t.x][t.y]=='g')//找到出口return;
            {
                flag=true;
                return;
            }
            for(int k=0;k<4;k++)
            {
                int nx=t.x+dir[k][0];
                int ny=t.y+dir[k][1];
                if(nx<0||nx>n-1||ny<0||ny>m-1)
                  continue;
                if(!book[nx][ny]&&mp[nx][ny]!='#')
                {
                    book[nx][ny]=true;
                    q.push(node({nx,ny}));
                }
            }
            q.pop();
        }
    }
    int main()
    {
        cin>>n>>m;
        for(int i=0;i<n;i++)
          for(int j=0;j<m;j++)
          {
              cin>>mp[i][j];
              if(mp[i][j]=='s')
                xx=i,yy=j;
          }
        flag=false;
        bfs();
        cout<<(flag?"Yes":"No")<<endl;
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    AXIS2远程调用WebService示例(Eclipse+AXIS)
    JSONPath使用说明
    七台机器部署Hadoop2.6.5高可用集群
    因为错误关闭Selinux导致CentOS7启动失败(进度条卡死,图形界面加载卡死)
    CentOS7静默安装Oracle11g
    MapReduce几种提交方式
    SpringMVC源码阅读:过滤器
    Java封装Redis常用操作
    IPv6 地址分类
    内网 LAN IPv6 环境配置 H3C S5500 Huawei S5700
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294243.html
Copyright © 2011-2022 走看看