这与图形边缘(桥)有关吗?找到从家到商店的快速路径

时间:2013-05-24 14:50:29

标签: python algorithm graph-theory

http://codility.com/中,存在一个问题:

  

您附近有N个广场,M个直达道路连接   他们。正方形从0到N-1编号。你住在   平方0,可以在0秒内到达它。这些商店都位于   正方形,每个都有一个。你会看到附近的地图   以四个零索引数组A,B,C和D的形式   数组A,B,C包含M个整数,而D包含N个整数。   对于每个I(0≤I      

可以有多条道路连接同一对方格,或两端进入的道路   同一个广场。

     

有些道路可能穿过隧道或隧道   过桥(也就是说,广场和道路的图表不必   是平面的。

     

无法保证您能够覆盖所有人   广场。对于每个J(0≤J

int solution(int A[], int M, int B[], int M2, int C[], int M3, int D[], int N);
  

,给定数组A,B,C和D,返回最小值   到达开放商店所需的时间(以秒为单位)。如果不可能,   它应该返回-1。

我的主要问题是确定问题。我没有沉重的数学背景。我做了测试,它可以像问题中提供的样本数据一样工作,但在提交之后,网站说这个数据是错误的data = [[6, 6, 3, 8, 8, 6, 7, 5, 1, 4, 3, 2, 7, 7], [3, 7, 5, 8, 0, 6, 3, 4, 1, 7, 1, 5, 3, 2], [8, 1, 9, 12, 11, 1, 8, 12, 3, 6, 12, 7, 4, 2], [-1, 1000000000, 1000000000, 999999999, 999999999, 999999999, 1000000000, 1000000000, 1000000000]]

我返回-1,但它说我需要返回11.如果我从0开始(家)并尝试找到更近的商店,我会卡住,因为0连接到8和8无处可去。我绘制图形,0-8与其余部分断开连接。我怀疑http://en.wikipedia.org/wiki/Bridge_(graph_theory)有关,这是我知识停止的地方。

这是问题的正确识别吗?

P.D:我对理解有python代码的问题更感兴趣。

1 个答案:

答案 0 :(得分:0)

我将大致解释几种方法,希望你可能会得到一些想法。听起来如果你自己解决问题对你的问题解决技巧有好处。

方法1。

使用二进制搜索来计算最短时间。对于二进制搜索中的每个猜测,如果可以在该时间内到达商店,则具有可用的功能。 (如果可能,减少时间,否则增加它)。您可以通过深度优先搜索广度优先搜索来检查是否可能(在比猜测更远的节点上停止)。

方法2。

使用pythons heapq数据结构。从[(0,start)]的初始堆开始,其中0是距离0,start是起始节点。然后对于连接到start的每个节点x,heappush(0 + dx,x)到heapq(dx是从start到x的距离)。现在开始吧。现在弹出下一个最佳节点。检查距离是否小于D [x]。继续。