推 ledia:有 x-y=k 和 (1,5)-(16,3) 兩條線, 應該每個 scan line 都能 11/22 22:10
→ ledia:求出交點 ? 11/22 22:10
→ ledia:應該說跨越的那個整點 11/22 22:10
→ ledia:x=k 和 y=k 亦同 11/22 22:10
推 seanwu:有bound的DFS? 所以每個格子可能走不只一次嗎? 11/23 00:48
→ bleed1979:在每個格子標記了走到的次數,只能較低不能高。 11/23 05:05
→ tkcn:有什麼理由不用 BFS 而用 DFS 嗎? 11/23 10:30
推 tyu:有試過 Bresenham's line algorithm 嗎? 11/23 10:46
→ bleed1979:感謝ty和tk,我先改BFS試試看,再不行就找演算法。 11/23 13:13
→ bleed1979:在我send超過50次後,是該放棄了。無法理解題目定義的 11/24 13:40
→ bleed1979:直接可看見和intersect的定義。削邊邊角角的是否要計算 11/24 13:41
推 DJWS:每個格子都先計算好能不能看到起點或終點 11/26 17:28
→ DJWS:然後把所有可以走的格子找出來,再用 BFS 應該就可以了? 11/26 17:29
→ DJWS:看得到起點或終點,也就是中間格子的高度不會擋到視線。 11/26 17:33
→ DJWS:把每個點離起點/終點的斜率都算出來,應該可以 DP ? 11/26 17:34
→ DJWS:用 DP 求每一格的斜率最大值/最小值之類的... 11/26 17:36
→ tkcn:BFS 每個點最多也只走一次,所以先算"視線"省不到時間 11/26 17:37
→ DJWS:因為我發現地圖只有 200 x 200 所以我想關鍵應該不在 BFS 11/26 17:39
→ DJWS:比較需要的是 有好的方法可以判斷視線會不會被擋住 11/26 17:40
→ tkcn:同樓上結論 :) 11/26 17:41
→ DJWS:例如 已經有 (x,y) 到 (0,0) 之間的最大斜率 11/26 17:42
→ DJWS:就可以快速判斷出 (2x, 2y) 會不會被擋住視線...之類的東西 11/26 17:43
→ DJWS:tkcn 抱歉...我要先去吃晚餐了 XD 11/26 17:43
→ tkcn:嘗試寫這題,結果也是TLE :X 我是用BFS+蠻快速的視線檢查 11/27 00:46
→ tkcn:所以我想,可能真的必須靠 DP 找出能走得格子再 BFS 了 11/27 00:47