zoukankan      html  css  js  c++  java
  • G.走出迷宫

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

    题目描述

    小明现在在玩一个游戏,游戏来到了教学关卡,迷宫是一个N*M的矩阵。
    小明的起点在地图中用“S”来表示,终点用“E”来表示,障碍物用“#”来表示,空地用“.”来表示。
    障碍物不能通过。小明如果现在在点(x,y)处,那么下一步只能走到相邻的四个格子中的某一个:(x+1,y),(x-1,y),(x,y+1),(x,y-1);
    小明想要知道,现在他能否从起点走到终点。

    输入描述:

    本题包含多组数据。
    每组数据先输入两个数字N,M
    接下来N行,每行M个字符,表示地图的状态。
    数据范围:
    2<=N,M<=500
    保证有一个起点S,同时保证有一个终点E.

    输出描述:

    每组数据输出一行,如果小明能够从起点走到终点,那么输出Yes,否则输出No
    示例1

    输入

    3 3
    S..
    ..E
    ...
    3 3
    S##
    ###
    ##E

    输出

    Yes
    No

    分析:简单BFS。

    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    char map[600][600];
    char s[100];
    bool vis[600][600];
    struct Node{
        int x,y;
    };
    int d[4][2]={0,1,0,-1,1,0,-1,0};
    int main()
    {
        int N,M;
        while(scanf("%d%d",&N,&M)!=EOF)
        {
            Node S;
            gets(s);
            for(int i=1;i<=N;i++)
            {
                for(int j=1;j<=M;j++)
                {
                    scanf("%c",&map[i][j]);
                    if(map[i][j]=='S') {S.x=i;S.y=j;}
                }
                gets(s);
            }
            int flag=0;
            memset(vis,0,sizeof(vis));
            queue<Node> q;
            q.push(S);
            while(!q.empty())
            {
                Node temp=q.front();
                q.pop();
                if(map[temp.x][temp.y]=='E')
                {flag=1;break;}
                vis[temp.x][temp.y]=1;
                for(int i=0;i<4;i++)
                {
                    Node R;
                    R.x=temp.x+d[i][0];R.y=temp.y+d[i][1];
                    if(R.x<1||R.y<1||R.x>N||R.y>M) continue;
                    if(!vis[R.x][R.y]&&map[R.x][R.y]!='#')
                    {
                        vis[R.x][R.y]=1;
                        q.push(R);
                    }
                }
            }
            if(flag) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    View Code


    作者:ACRykl —— O ever youthful,O ever weeping!

    出处:http://www.cnblogs.com/ACRykl/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    软工人日常
    11.5
    11.4
    11.3
    11.2阅读笔记
    11.1阅读笔记
    10.31 异常
    10.30动手动脑
    10.29
    10.28
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8068194.html
Copyright © 2011-2022 走看看