題目要一次測5000個點對點,不可能每次都展開一次,所以要一次完成,剩下只要查詢。
先隨便取一點(1,1),利用往外擴散的方式,找出相對距離,以題目給的例子為例。
distance:
# # # # # # # # # # # 1 2 3 4 5 6 # 12 # # # # # # 6 # 10 11 # # # # # # 7 8 9 # # # # # 22 # 8 # 10 # # # # # 21 # 9 # 11 12 # # # 21 20 19 # 13 12 # # # # 22 # 18 17 # 13 # # # 24 23 24 # 16 15 14 15 # # # # # # # # # # #
那為了解決如(1,6),(2,5)這種分支的距離,必須在這之間動點手腳
為每個道路命名,如果遇到可以分支的點就換個道路的名字,並記錄下分支點
path:
# # # # # # # # # # # 0 0 0 0 0 1 # 6 # # # # # # 2 # 6 6 # # # # # # 2 3 3 # # # # # 14 # 4 # 5 # # # # # 14 # 4 # 5 7 # # # 13 12 12 # 9 8 # # # # 13 # 12 12 # 10 # # # 16 13 15 # 12 12 10 11 # # # # # # # # # # #
這樣如果要找任兩點距離的話,只要找出分支出兩個點的那個點就可以了,透過加減距離算答案。
而記下道路則是為了避免重複計算距離(用心去感受)