1 | 这篇题解应该是我征战TG以来第一篇题解,特此纪念。 |
这道题是个搜索好题,有很多种做法,大体题意就是走迷宫(可以上下左右走),大小为n*n,其中有m个障碍,问你从左下角到右上角的最大步数与最小步数之差。
我们分开来看,最小步数的话,bfs一遍就行了,最大步数的话,写个dfs试试看,万一就卡时间过了呢(这种思想很危险,NOIP千万不能这么想)。。。
bfs的思路:两个队列qx,qy分别存x,y坐标,pd[][]用来判重,dis[i][j]表示到(i,j)的最少步数,应该比较好懂。
dfs的思路:
①:直接爆搜,具体解释见代码一。
②:记忆化搜索,为了不超时,记忆化是个好东西,同样,pd[][]判重,但dis[i][j]表示到(i,j)的步数(是个临时变量,要回溯),M[][]表示到(i,j)的最大步数(基本确定,只有最后的最大值修改时才会变),具体解释见代码二。
给各位读者一段话:你的水平不取决于你解决了多少个题,而是取决于你是如何思考的。当你试图去解决一个问题时,你应该先独立思考。如果你实在没有思路,那么你应该去一点一点的读别人的题解,而不是一次性都读完,尽可能确保能有更多的部分是你自己做出来的。之后,仔细思考下,为什么你会想不出来依赖于题解解决的那些部分。千万别抄别人的代码,每个人都有他独特的解题理解方式。
所以说……有思路就不要再看我的代码了。
附件:
代码一(90Pts) 有一个点TLE,原因是dfs直接爆搜。
1 |
|
代码二(100Pts)dfs变成了记忆化搜索,节省时间。
1 |
|
祝各位OIer(Of course including me)