码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 P1605 【迷宫】题解

时间:2018-04-07 13:58:02      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:大神   直接   body   帮助   技巧   pos   search   turn   一个   

先吐槽一句:本人测了无数次,都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 【迷宫】题解

标签:大神   直接   body   帮助   技巧   pos   search   turn   一个   

原文地址:https://www.cnblogs.com/ctc20050412/p/8732806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!