按說方法區別不大,因爲和上一篇中用的算法基本一樣,依然是BFS,但是這個程序速度和內存佔用都比上一個提高很多。
爲什麼呢?原因是這樣子的,種種跡象表明,OJ上的測試數據量很大的,所以如果對於同一個起點有很多個測試數據的話,不如首先將[i,j]爲起點的所有點在圖上BFS,並且對應每個終點的最短路徑直接就存在map[i][j][endx][endy]
這樣得到輸入數據以後,直接查表輸出即可,避免了大量的重複運算。
另外因爲輸入輸出改爲純C,速度也有提高,昨天犯的錯誤非常低級,我試圖用長度爲2的字符串數組輸入長度爲2的字符串,這種情況下,windows下用VC應該是編譯器自動補上了這個沒有結尾的字符串數組,而在linux的G++下,編譯器沒有這個動作,造成錯誤,而且很不明顯。穩妥的做法是用長度爲n+1的字符串數組輸入最大長度爲n的字符串。
當然,如果用C++下的string型,就更爲穩妥了,可以避免這種在實際中難以察覺的錯誤。
在網上搜到有人用DFS做1091,不是不可以,但是用DFS顯然不是出題者的意圖,這道題考察的就是無權重的有向圖的最短路徑,第一反映就應該是BFS。