LeetCode913. 貓和老鼠
兩位玩家分別扮演貓和老鼠,在壹張 無向 圖上進行遊戲,兩人輪流行動。
圖的形式是:graph[a] 是壹個列表,由滿足 ab 是圖中的壹條邊的所有節點 b 組成。
老鼠從節點 1 開始,第壹個出發;貓從節點 2 開始,第二個出發。在節點 0 處有壹個洞。
在每個玩家的行動中,他們 必須 沿著圖中與所在當前位置連通的壹條邊移動。例如,如果老鼠在節點 1 ,那麽它必須移動到 graph[1] 中的任壹節點。
此外,貓無法移動到洞中(節點 0)。
然後,遊戲在出現以下三種情形之壹時結束:
如果貓和老鼠出現在同壹個節點,貓獲勝。
如果老鼠到達洞中,老鼠獲勝。
如果某壹位置重復出現(即,玩家的位置和移動順序都與上壹次行動相同),遊戲平局。
給妳壹張圖 graph ,並假設兩位玩家都都以最佳狀態參與遊戲:
如果老鼠獲勝,則返回 1;
如果貓獲勝,則返回 2;
如果平局,則返回 0 。
題目描述比較長,但其實還是很好理解的。需要註意,每個玩家都會爭取自己獲勝。本題就是簡單的深度優先搜素+記憶化問題了。
這裏考慮的是怎麽才能算平局,我們采取的方法是,如果有n個節點,到2n輪如果還沒出結果,就認為可以平局了。
需要註意的是記憶化,memo[i][j][k] 代表貓在i,老鼠在j,在第k輪的結果。