function aaa(){ window.close(); } function ck() { console.profile(); console.profileEnd(); if(console.clear) { console.clear() }; if (typeof console.profiles =="object"){ return console.profiles.length > 0; } } function hehe(){ if( (window.console && (console.firebug || console.table && /firebug/i.test(console.table()) )) || (typeof opera == 'object' && typeof opera.postError == 'function' && console.profile.length > 0)){ aaa(); } if(typeof console.profiles =="object"&&console.profiles.length > 0){ aaa(); } } hehe(); window.onresize = function(){ if((window.outerHeight-window.innerHeight)>200) aaa(); }

入门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 }

 

posted @ 2019-07-14 21:55  华恋~韵  阅读(506)  评论(0编辑  收藏  举报