阅读量:0
在看之前,先把他关注了,谢谢iwowo 的个人中心 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
代码思路主要来自他(说实话,代码我也会)但是,思路和代码还是不一样的,所以
快去关注啊!!!
所以,关注我的同时,一定要关注他!!!!!!!!
禁止机惨!!
恭喜该贴获奖!!!
题目描述
题目描述:
在一个迷宫里面有一只小狗发现了一根骨头,现在他准备逃出迷宫,迷宫中只有一个地方有门可以出去,而且这个门只会在T秒的时候打开,开了之后下一时刻就会关闭。每移动一步要花费1秒,规定不能停留在某一个位置上,即走到一个位置要立刻前往下一个位置。每个位置不能重复走。假设小狗很聪明,它能成功逃出迷宫么?
输入格式:
第一行输入三个整数𝑛,𝑚,𝑇n,m,T,表示迷宫的尺寸以及门打开的时间
接下来𝑛n行每行𝑚m个字符,表示迷宫中每一个位置上的信息。
'X': 表示墙,不能进入
'S': 小狗现在的位置
'D': 门
'.': 空地
输出格式:
根据能否成功逃离,输出“YES” 或者“NO”
样例输入1:
4 4 5 S.X. ..X. ..XD ....
样例输出
NO
样例输入2:
3 4 5 S.X. ..X. ...D
样例输出2:
YES
我们先想这题的思路
首先,我们先想一下,他这个图整什么样
标注tj是我 标注iwowo是某个神犇
#include<bits/stdc++.h>//tj using namespace std;//tj int dx[4]={0,0,-1,1};//tj+iwo int dy[4]={1,-1,0,0};//tj+iwo int T,n,m; char mp[11][45];//tj(暗藏玄机) bool vis[14][19];//iwo(暗藏玄机) int sx,sy,fx,fy;//iwowo+tj void dfs(int x,int y,int t){//iwowo // cout<<1; if(x==fx&&y==fy&&t==T){//iwowo//时间和位置都对 cout<<"YES\n";//对的 exit(0);//tj+iwowo//结束全部程序,在任何函数内都可以瞬间停止程序 *此注释由iwowo提供 } vis[x][y]=1;//iwowo for(int i=0;i<4;i++){ int nx=x+dx[i],ny=y+dy[i];//tj//现在的地方 if(nx>n||ny>m||nx<1||ny<1||mp[nx][ny]=='X'||vis[nx][ny]==1){//iwowo continue;//tj 停止这次循环 //条件 tj(本人):1,2,5 iwowo:3,4,5,6 } dfs(nx,ny,t+1);//iwowo 考虑下一秒的情况,深入搜索 *此注释由iwowo提供 } vis[x][y]=0;//iwowo 回溯 } int main(){ cin>>n>>m>>T;//tj for(int i=1;i<=n;i++){//iwowo+tj 迷宫题从1开始 for(int j=1;j<=m;j++){//iwowo+tj cin>>mp[i][j];//tj //cout<<0+j; if(mp[i][j]=='S'){//tj+iwowo//是S标注起点位置 sx=i; sy=j; //cout<<sx<<' '<<sy<<endl; } if(mp[i][j]=='D'){//tj+iwowo//是D标注重点位置 fx=i; fy=j; //cout<<fx<<' '<<fy<<endl; } } } dfs(sx,sy,0);//iwowo cout<<"NO";//tj return 0; }
约定:
1<𝑛,𝑚<7, 0<𝑇<50
提示: