這道題不看答案,沒想出思路,做題還是不夠,看了bfs的思路,然后手寫了一遍,記錄一下。
這道題從bfs的角度來看,思路很像最短路徑的spfa的方法,不斷進行松弛操作,動態逼近最優解,先把0的的點放在隊列中,然后慢慢松弛其周圍1的點,沒必要每一個點都進行bfs操作,從而把時間復雜度降了下來。
代碼:https://pastebin.com/zxQdVZuF
語法積累:
- vector套vector:
初始化:vector<vector<int> >o(len1,vector<int>(len2, INT_MAX));
操作:可以直接像二維數組調用。 - queue front(正) top(錯)
另一種提供的方法從dp角度考慮,一個點受到周圍(上下左右)4個點的影響,可以分2部,從左上到右下和從右下到左上兩個過程處理,也可以從左下到右上和右上到左下處理,第一過程中保證兩個方向的正確性,然后第二過程在第一過程基礎上完成另外兩個方向的正確性。
代碼:https://pastebin.com/YwLmjbW4(從左下到右上和右上到左下)