Algorithm 找到占用网格的最短时间
问题: 考虑一个病人皮肤感染和细菌蔓延迅速。假设蒙皮曲面缩放为大小为MxN的矩形网格,单元格由0和1标记,其中0表示蒙皮上的非受影响区域,1表示蒙皮上的受影响区域。细菌可以在4个可能的方向(右、左、上、下)从网格的一个细胞移动到另一个细胞,但在一个方向上一次只能移动到一个细胞,并在1秒内影响该细胞。目前正在治疗患者的医生看到了患者的状况,并想知道在细菌蔓延到全身皮肤和患者死亡之前,他还有多少时间可以拯救他。你能帮助估计细菌完全占据皮肤表面所需的最短时间吗 输入::皮肤的当前状态。(尺寸为MxN的矩阵,带有1和0,表示受影响和非受影响区域) 输出::覆盖整个网格的最小时间(秒) 示例: 输入: [1 10 0 1]Algorithm 找到占用网格的最短时间,algorithm,recursion,artificial-intelligence,dynamic-programming,backtracking,Algorithm,Recursion,Artificial Intelligence,Dynamic Programming,Backtracking,问题: 考虑一个病人皮肤感染和细菌蔓延迅速。假设蒙皮曲面缩放为大小为MxN的矩形网格,单元格由0和1标记,其中0表示蒙皮上的非受影响区域,1表示蒙皮上的受影响区域。细菌可以在4个可能的方向(右、左、上、下)从网格的一个细胞移动到另一个细胞,但在一个方向上一次只能移动到一个细胞,并在1秒内影响该细胞。目前正在治疗患者的医生看到了患者的状况,并想知道在细菌蔓延到全身皮肤和患者死亡之前,他还有多少时间可以拯救他。你能帮助估计细菌完全占据皮肤表面所需的最短时间吗 输入::皮肤的当前状态。(尺寸为MxN的
[0110]
[01]
[011000] 输出:2秒 说明: 输入1秒后,矩阵可能如下所示 [1 10 1]
[1 10 1]
[01101]
[01101] 在下一秒,矩阵被1完全填充
这里我不会给出一个详细的解决方案,但是一些想法可能会帮助您编写自己的程序
以类似的方式,一旦被感染的细胞被其他感染细胞包围,就不再需要为下一个动作考虑它。
最后,可以方便地列出受感染细胞的列表,以及每个细胞可以移动到的未受感染细胞的数量H(B)=H(A)^f(i,j)
f(i,j)=a*(1024*i+j)%b
每次计算一个新的图时,我们必须计算相应的H值,并检查它是否已经存在于过去的图集中。 这里我将不提供详细的解决方案,但一些想法有望帮助您编写自己的程序
以类似的方式,一旦被感染的细胞被其他感染细胞包围,就不再需要为下一个动作考虑它。
最后,可以方便地列出受感染细胞的列表,以及每个细胞可以移动到的未受感染细胞的数量H(B)=H(A)^f(i,j)
f(i,j)=a*(1024*i+j)%b
每次计算一个新的图时,我们必须计算相应的H值,并检查它是否已经存在于过去的图集中。 我不知道在面试的情况下,我能做到什么程度。经过一些思考,而不是考虑存储一个以上的全板状态的解决方案,我宁愿考虑贪婪优先队列,因为下一个零单元的强启发式算法。
e.g., choose A over B
1 1 B 0 1
0 1 1 0 0
0 0 A 0 1
0 1 0 0 0
e.g., choose A over B
1 1 1 0 1
1 B 1 0 A
0 0 0 0 1
0 1 0 0 0