【问题标题】:How to find shortest path in O(mn)如何在 O(mn) 中找到最短路径
【发布时间】:2019-01-10 08:03:23
【问题描述】:

给定一个大小为(n*m)matrix A,对于所有i,j,我们有aij=1aij=0,如果aij=1我们称之为“黑色”,否则“白色”,两点之间的距离p(i,j)q(k,l) 定义如下: d(p,q)=|i-k|+|j-l|.

是否有任何算法及时运行O(mn) 来为所有白点找到一个白点及其最近的黑点?

dp1[i][j] = min(dp1[i-1][j], dp1[i][j-1],dp[i-1][j-1]+1)+1 if A[i][j]=1 else 0
dp2,dp3,dp4 are similar

res[i][j] = min(dp1[i][j], dp2[i][j], dp3[i][j], dp4[i][j])
here are my code, I cannot guarantee correctness

【问题讨论】:

  • 我发现问题中的语言令人困惑。您的意思是“是否有运行时间为 O(mn) 的算法可以为所有白点 i,j 找到最接近 i,j 的黑点?”?如果是这样,那与“最短路径”有什么关系?
  • 是的!你的表情比我好。

标签: shortest-path


【解决方案1】:

我想我们在同一所大学。 我认为永琰的回答是不正确的。你的答案只能涵盖黑色的上、下、左、右,如果白的上、下、左、右没有黑色,则错误最短距离。

这是我的回答:

dp1[i][j] = min(dp1[i-1][j], dp1[i][j-1])+1 if A[i][j]=1 else 0
dp2[i][j] = min(dp2[i-1][j], dp2[i][j+1])+1 if A[i][j]=1 else 0
dp3[i][j] = min(dp3[i+1][j], dp3[i][j-1])+1 if A[i][j]=1 else 0
dp4[i][j] = min(dp4[i+1][j], dp4[i][j+1])+1 if A[i][j]=1 else 0

res[i][j] = min(dp1[i][j], dp2[i][j], dp3[i][j], dp4[i][j])

【讨论】:

  • 我和你有同样的答案,但我在贝尔曼方程中检查了三种不同的方法
猜你喜欢
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
相关资源
最近更新 更多