题目链接
UVa 1600
方法:BFS (三层标记)
题目分析
题目大意
给定一个m*n的矩阵,0表示可以通行,1表示有障碍。机器人在无障碍时可以自由通行,但是如果粉碎障碍穿过的话,最多只能连续穿多k个障碍。问,机器人从(1,1)到(m,n)最少需要多少步?
解析
如果没有障碍,直接采用BFS,很容易找出解,但是如果有破墙这个事情,则增加一维vis数组,记录状态。
记录状态——关于vis标记数组(在此感谢Isco学长)
vis这个数组很强大,可以用0/1表示是否访问,也可以用0/steps表示走到当前位置的步数,如果从0开始,就先置-1/INF。此外,vis这个数组不局限于二维,如本题中,使用的是三维形式,到(x,y)点再记录一下已连破的障碍物数量z。利用这三个状态(x、y、z),记录经过破z堵墙到(x,y)点的最小步数。在代码中,请关注两处含**
的注释。
代码
1 |
|