洛谷 P1605 迷宫题解

Posted ctc20050412

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1605 迷宫题解相关的知识,希望对你有一定的参考价值。

先吐槽一句:本人测了无数次,都50分,最后发现,竟然是读入的顺序错了........不过这都能50分,运(shu)气(ju)真不错(shui)

看了各位大神(lao)们题解,再看看自己的,不禁感慨--都写都是人吗......

带远了,言归正传,此题有个技巧(来自:@ybb756032937 大大),不必判断超界,直接把整个地图刷成1即可

还有一点,其实一个map数组即可,不需要两个,这一个map数组,承担了:1.超界处理 2.障碍 3.路过

在dfs之前可以先判断终点有没有路障,如果有直接输出0,退出

还有一点,此题标准dfs,逆向思维其实相比正向思维省时间,下面奉上代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,t,sx,sy,ex,ey,x,y,a[11][11],ans,wx[5] = {0,-1,0,1,0},wy[5] = {0,0,1,0,-1};
//wx,wy是控制方向的
//a即是map数组
void search(int nowx,int nowy){ //逆向dfs,看到现在,没一位大佬写
if(!a[nowx][nowy]) return; //判断超界,路障,路过
if(nowx==ex&&nowy==ey){ //判断是否到终点
ans++;
return;
}
for(int i = 1;i<=4;i++){ //四个方向
a[nowx][nowy] = 0;
search(nowx+wx[i],nowy+wy[i]);
a[nowx][nowy] = 1;
}
}
int main(){
cin>>n>>m>>t;
for(int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++)
a[i][j] = 1; //整个地图刷成1
cin>>sx>>sy>>ex>>ey;
for(int i = 1;i<=t;i++){ //放障碍
cin>>x>>y;
a[x][y] = 0;
}
if(!a[ex][ey]){ //判断终点是否有障碍
cout<<0;
}else{
search(sx,sy); //dfs
cout<<ans;
}
return 0;
}
```
如果对你有帮助就点个赞吧~~

以上是关于洛谷 P1605 迷宫题解的主要内容,如果未能解决你的问题,请参考以下文章

洛谷p1605迷宫 dfs

洛谷 P1605 迷宫

P1605 迷宫

P1605 迷宫

无聊的我写了一个代码 。。。P1605 迷宫

洛谷P1519 穿越栅栏 Overfencing