我浪费了3天,
最终解决了一个
用于
查找最短距离的图形问题
使用BFS
希望分享经验。
When the (undirected for me) graph has
fixed distance (1, 6, etc.) for edges
#1
We can use BFS to find shortest path simply by traversing it
then, if required, multiply with fixed distance (1, 6, etc.)
#2
As noted above
with BFS
the very 1st time an adjacent node is reached, it is shortest path
#3
It does not matter what queue you use
deque/queue(c++) or
your own queue implementation (in c language)
A circular queue is unnecessary
#4
Number of elements required for queue is N+1 at most, which I used
(dint check if N works)
here, N is V, number of vertices.
#5
Wikipedia BFS will work, and is sufficient.
https://en.wikipedia.org/wiki/Breadth-first_search#Pseudocode
我花了3天的时间尝试上述所有替代方法,一次又一次地验证并重新验证
它们不是问题。
(如果发现以上5个问题,请尝试花费时间查找其他问题)。
来自以下评论的更多解释:
A
/ \
B C
/\ /\
D E F G
假设上面的图形
向下,
对于A,相邻的是B&C,
对于B,相邻的是D&E,
对于C,相邻的是F&G
例如,起始节点是A
当您到达A,B,C时,从A到B&C的最短距离是1
当您到达D或E(通过B)时,到A&D的最短距离是2(A-> B-> D)
同样,A-> E为2(A-> B-> E)
同样,A-> F&A-> G为2
因此,现在节点之间的距离不是1,而是6,而是将答案乘以6的
例子,
如果每个节点之间的距离为1,则A-> E为2(A-> B-> E = 1 + 1 )
如果彼此之间的距离为6,则A-> E为12(A-> B-> E = 6 + 6)
是的,bfs可以采取任何措施
但我们正在计算所有路径
如果您必须从A到Z,那么我们将所有路径从A到中间I,并且由于会有很多路径,我们会丢弃除最短路径之外的所有路径,直到I,然后
再次从最短路径继续到下一个节点J 从I到J有多条路径,我们仅以最短的一个
例子为例,
假设
A->我有距离5
(STEP)假设I-> J我们有多条路径,分别为7和8,因为7是最短的
我们将A-> J设为5(A-> I最短)+ 8(现在最短)= 13,
所以A-> J现在为13
我们在(STEP)上方重复J-> K,依此类推,直到得到到Z
阅读此部分2或3次,并在纸上绘画,您一定会得到我所说的,祝您好运