这道题目要求在一个 m × n 的矩阵中,选择最多 k 个派件点,使得派件点能够覆盖尽可能多的楼栋 (B)。派件点的覆盖范围是在同一行或同一列内,距离不超过 s 且不被防御设施 (#) 阻挡的楼栋。快递员只能移动到空地 (0) 或楼栋 (B) 上,不能穿过防御设施
思路步骤 1.确定可达点:
使用广度优先搜索(BFS)从快递员的起始位置 [row, col] 出发,找到所有可以到达的点(0 或 B),这些点是潜在的派件点。
小明是一名快递员,他每天都要在城市里送很多快递。他负责的一个小区是一个很特别的地方,这个小区原本是一个军事基地,后来被改造成了住宅区。因为基地的设计很复杂,所以小区的布局也很奇怪,大体上可以看成一个 m×n 个方格组成的矩阵。有些地方还保留了原来的防御设施。这些设施对于普通人来说是不可进入的,所以小明不能穿过它们。(0 代表空地, B 代表楼栋, # 代表防御设施)
小区的住户大多数是退伍军人或者军人家属,他们都有一种特殊的习惯:他们不喜欢下楼取快递,而是要求小明把快递送到他们附近的某个地方,然后他们再去取。这是因为他们觉得下楼太麻烦,而且有些人还有战争创伤,不愿意和外界接触。小明虽然觉得这样很不合理,但是他也不敢得罪这些住户,只能尽量满足他们的要求。
小明每天都会从小区的一个入口开始送快递,这个入口的位置是 [row,col] 。他可以在空地和楼栋之间自由移动,但是不能穿过防御设施。他的投递方式是这样的:他会在小区里选最多 k 个派件点,然后通知周边楼栋的住户前来取件。派件点必须是空地或者楼栋,并且小明可以到达。通知范围是和派件点距离不超过 s 的同一行或者同一列,并且没有被防御设施挡住的楼栋。
小明希望能够选择合适的派件点,使得他可以给最多楼栋派发快递,并且节省时间和精力。你能帮助小明吗?
第一行:两个整数 m 和 n (0<m,n≤9),代表小区的大小
第二行:两个整数 row 和 col (0≤row<m,0≤col<n),代表快递员的初始位置
第三行:派件点数目 k (0<k≤5)
第四行:派件点可派件的最大距离 s (0<s≤30)
接下来是 m 行 n 列的矩阵,每一行的元素以空格分隔,内容为(0,B,#)
用例保证所有的输入在正常范围内。
返回最多可派件的楼栋数量。
输入
4 4
0 1
2
1
#0B#
0BB#
0#0#
B#B0
输出
4