题目:原题链接(困难)

标签:极小化极大、动态规划、广度优先搜索、图

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N 3 ) O(N^3) O(N3) O ( N 3 ) O(N^3) O(N3) 416ms (74.00%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:
    def catMouseGame(self, graph: List[List[int]]) -> int:
        @functools.lru_cache(None)
        def count(t, x, y):
            """
            :param t: 当前移动时间
            :param x: 当前老鼠的位置
            :param y: 当前猫的位置
            :return: 当前的游戏情况
            """
            # 处理猫抓到老鼠的情况
            if x == y:
                return 2

            # 处理老鼠进洞的情况
            if x == 0:
                return 1

            # 处理连续出现重复位置的情况
            if t == 2 * size:
                return 0

            # 处理老鼠移动的情况
            if t % 2 == 0:
                cat_can_win = True
                for i in graph[x]:
                    res = count(t + 1, i, y)
                    if res == 1:  # 处理老鼠能进洞的情况
                        return 1
                    elif res == 0:
                        cat_can_win = False
                if cat_can_win:
                    return 2
                else:
                    return 0

            # 处理猫移动的情况
            else:
                mouse_can_win = True
                for i in graph[y]:
                    if i == 0:  # 忽略老猫进洞的情况
                        continue
                    res = count(t + 1, x, i)
                    if res == 2:
                        return 2
                    elif res == 0:
                        mouse_can_win = False
                if mouse_can_win:
                    return 1
                else:
                    return 0

        size = len(graph)
        return count(0, 1, 2)