【问题标题】:Shortest path visiting all 1s in a binary matrix (when visiting 0s is allowed)访问二进制矩阵中所有 1 的最短路径(允许访问 0 时)
【发布时间】:2020-11-01 05:55:24
【问题描述】:

给定一个 n 行 m 列的矩阵 0

n=3 and m=4
1 1 0 0
0 1 0 0
0 0 0 1
soln: 5
The answer is 5 because, I will start from position(0 based indexing) 
(0,0)->(0,1)->(1,1)->(1,2)->(1,3)->(2,3)
n=3 and m=6
matrix is
1 1 1 1 0 0
0 0 0 1 0 0
1 1 1 1 0 1
soln: 11
The answer is 5 because, I will start from position(0 based indexing) 
(2,5)->moving horizontally left to (2,0)->moving vertically up to(0,0)->moving horizontally right to (0,3) -> moving down to (1,3) and hence with this we will be visiting all the vertices

我尝试过最小生成树等方法,广度优先搜索不是一个好主意。请记住,当您从点 x,y 开始移动时,您必须保持水平或垂直移动,直到您至少没有访问所有顶点一次。

【问题讨论】:

  • 您应该解释您发布的示例。为什么解决方案是511?您可以搜索广度优先搜索 (BFS) 是什么并尝试应用到此问题。看看 BFS 是否适合这个问题。发布您到目前为止编写的代码以及您面临的问题。因此,您需要在这篇文章中添加细节或清晰度。
  • @ShridharRKulkarni 先生,我已经更新了问题
  • 嘿,谢谢你的尊重。但不需要使用先生/妈妈。在这个社区中,每个人都是平等的。
  • 能否请您指出这个问题的根源?我觉得这个问题很有趣。
  • 高盛在校园招聘的编码轮中被问到。后来在这里发布这个问题我才知道人们能够使用旅行商算法通过大多数测试用例(10/12)。

标签: algorithm data-structures graph


【解决方案1】:

这个问题似乎比我最初阅读它时所想的要难(双关语)。在我看来,这就像一条最小成本哈密顿路径 - 您必须以最小总成本访问无向图的每个顶点。

推荐阅读:

  1. The Minimum Flow Cost Hamiltonian Cycle Problem
  2. How to solve the Shortest Hamiltonian Path problem on Sparse Graphs?

如果我能想到一个相对简单的解决方案,我会告诉你的。


你给出的第二个例子是

1 1 1 1 0 0
0 0 0 1 0 0
1 1 1 1 0 1

以上可以翻译成

从给定的矩阵形成图形:

将每个1视为图中的一个节点,相邻顶点之间有一条边。

如何连接组件?

假设 C1 和 C2 是两个组件。找到一对 顶点,使得 v1 属于 C1,v2 属于 C2,并且 v1 和 v2 之间的距离是所有可能的 对中最小的。如何找到这样的一对?我会把它留作练习。试试看。如果做不到,请告诉我。

压缩边缘:

通过更多努力,您可以“压缩”图中的边。 “压缩”是指所有链都可以表示为一个节点。我试图分别借助颜色来表示上图中链的含义。尽管优化得很好,但压缩不是必需的。

如果一个顶点连接到两个以上的顶点,不要将其包含在压缩中,例如上面显示的黄色节点。请注意,由于我们上面讨论的组件连接,黄色节点连接到蓝色 1。


如果您使用0<=n, m <=30 约束,您可能不需要形成一个图形并对其进行压缩。正如您所说,这个问题是在校园安置编码轮中提出的,只需尝试使用输入矩阵,提交并检查是否超过时间限制。但是在面对面的讨论中,可能会期望通过某种方式进行优化,例如边缘压缩是我可以提出的一种优化,如果图形包含链或 1s 的数量较少,则可能会有所帮助与 0s 的数量相比 - 稀疏矩阵。


【讨论】:

  • 请提供一种连贯一致的方式,将二进制矩阵输入转换为您的解决方案需要我们处理的图形。
  • 请提供一种一致的方法,您可以通过该方法将已连接 1 的组件连接到已连接 1 的其他组件。您当前的插图似乎对此类连接做出了假设,但没有说明方法,我们需要该方法来评估此答案。
  • @גלעדברקן:在我写这个解决方案的时候,我在脑海中经历了一些步骤。你的澄清问题使我以书面形式提出。谢谢。让我知道是否有更多建议。我希望有一个更好的解决方案,而不是一个硬性的解决方案,因此我最初并没有给出一个完整的解决方案,希望有人发布一个更简单的解决方案。但现在 OP 也暗示是 TSP,我认为我们从一开始就走在了正确的轨道上。
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多