• 入门OJ 1276【迷宫搜索】


    描述

    迷宫的游戏,相信大家都听过,现在我们用一个n*m的矩阵表示一个迷宫,例如:
    S.X.
    ..X.
    ..XD
    ....
    其中‘S’表示起点,‘D’表示终点,‘X’表示该位置为墙,不可以走,‘.’表示可以通行。每次只能向“上下左右”四个方向移动一步。
    你的任务是判断在x步内(小于等于x),能否从起点走到终点。

    输入输出格式

    输入

    第一行输入三个数n m x,分别表示迷宫的尺寸和步数。(1 < n,m < 7; 0 < x < 50)
    接下来输入一个n*m的矩阵,描述迷宫的状态。

    输出

    判断是否能在x步内从起点走到终点,如果可以,输出“YES”,否则输出“NO”。

    输入输出样例

    输入样例1

    3 4 5
    S.X.
    ..X.
    ...D

    输出样例1

    YES
    

    解题思路

      典型的BFS题目,从起点开始搜索,判断出界,判断障碍物,再记得打标记即可。

    题解

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,m,x,sx,sy,ex,ey; 
     4 char mp[10][10];//存图 
     5 struct node{
     6     int xx;
     7     int yy;
     8     int t;
     9     node(){}
    10     node(int xxx,int yyy,int tt)//构造函数 
    11     {
    12         xx=xxx;
    13         yy=yyy;
    14         t=tt;
    15     }
    16 };
    17 queue<node> q;
    18 int dir[4][2]={0,1,0,-1,1,0,-1,0};//四方向 
    19 void dfs(int tx,int ty)
    20 {
    21     q.push(node(tx,ty,0));
    22     while(!q.empty())
    23     {
    24         node head=q.front();//取队首元素 
    25         q.pop();
    26         if(head.xx==ex&&head.yy==ey)//搜索到了 
    27         {
    28             if(head.t<=x)//步数合法 
    29                 cout<<"YES";
    30             else cout<<"NO";//步数不合法 
    31             return;
    32         }
    33         for(int i=0;i<4;i++)//四个方向扩展 
    34         {
    35             int X=head.xx+dir[i][0];
    36             int Y=head.yy+dir[i][1];
    37             if(mp[X][Y]!='X'&&X>=1&&X<=n&&Y>=1&&Y<=m)//障碍与越界 
    38             {
    39                 mp[X][Y]='X';//标记 
    40                 q.push(node(X,Y,head.t+1));
    41             }
    42         }
    43     }
    44     cout<<"NO";//没找到 
    45 }
    46 int main()
    47 {
    48     cin>>n>>m>>x;
    49     for(int i=1;i<=n;i++)
    50     {
    51         for(int j=1;j<=m;j++)
    52         {
    53             cin>>mp[i][j];
    54             if(mp[i][j]=='S')//起点 
    55             {
    56                 sx=i;
    57                 sy=j;
    58             }
    59             if(mp[i][j]=='D')//终点 
    60             {
    61                 ex=i;
    62                 ey=j;
    63             }
    64         }
    65     }
    66     dfs(sx,sy);
    67 }
  • 相关阅读:
    IIS日志字段详解
    Linux CPU监控指标
    PMP 质量管理新7张图
    PMP 质量管理7张图 很形象
    【MVC model 验证失效 】【Unexpected token u in JSON at position 0】【jquery-plugin-validation】
    VS 忽略文件 Git 向远程添加问题
    .Net Core 知识了解:一跨平台的奥秘
    ios 时间解析 差8个小时
    百度定位转腾讯定位
    需求评审会议分析
  • 原文地址:https://www.cnblogs.com/hualian/p/11186022.html
Copyright © 2020-2023  润新知