概述
A game on an undirected graph is played by two players, Mouse and Cat, who alternate turns.
The graph is given as follows: graph[a]
is a list of all nodes b
such that ab
is an edge of the graph.
Mouse starts at node 1 and goes first, Cat starts at node 2 and goes second, and there is a Hole at node 0.
During each player's turn, they must travel along one edge of the graph that meets where they are. For example, if the Mouse is at node 1
, it must travel to any node in graph[1]
.
Additionally, it is not allowed for the Cat to travel to the Hole (node 0.)
Then, the game can end in 3 ways:
- If ever the Cat occupies the same node as the Mouse, the Cat wins.
- If ever the Mouse reaches the Hole, the Mouse wins.
- If ever a position is repeated (ie. the players are in the same position as a previous turn, and it is the same player's turn to move), the game is a draw.
Given a graph
, and assuming both players play optimally, return 1
if the game is won by Mouse, 2
if the game is won by Cat, and 0
if the game is a draw.
Example 1:
Input: [[2,5],[3],[0,4,5],[1,4,5],[2,3],[0,2,3]] Output: 0 Explanation: 4---3---1 | | 2---5 / 0
Note:
3 <= graph.length <= 50
- It is guaranteed that
graph[1]
is non-empty. - It is guaranteed that
graph[2]
contains a non-zero element.
思路:模拟一遍游戏,
1. 注意返回值,如果你设定的返回是一个数,就照着一个数的思想去想
2. 在求某个状态的时候,先把这个状态设置为draw,这样可以处理环的问题
https://leetcode.com/problems/cat-and-mouse/discuss/175892/recursion-+-memorization-84ms-Python
class Solution(object):
def catMouseGame(self, graph):
"""
:type graph: List[List[int]]
:rtype: int
"""
mouse,cat={},{}
def mouse_move(i,j):
if (i,j) in mouse: return mouse[(i,j)]
mouse[(i,j)]=0
canDraw = False
for t in graph[i]:
if t==0:
mouse[(i,j)]=1
return 1
if t==j: continue
tmp = cat_move(t,j)
if tmp==1:
mouse[(i,j)]=1
return 1
if tmp==0: canDraw=True
res = 0 if canDraw else 2
mouse[(i,j)]=res
return res
def cat_move(i,j):
if (i,j) in cat: return cat[(i,j)]
cat[(i,j)]=0 # handle draw case
canDraw = False
for t in graph[i]:
# case1
if t==j:
cat[(i,j)]=2
return 2
# case2
if t==0: continue
# case3
tmp = mouse_move(i,t)
if tmp==2:
cat[(i,j)]=2
return 2
if tmp==0: canDraw=True
res = 0 if canDraw else 1
cat[(i,j)]=res
return res
return mouse_move(1,2)
s=Solution()
print(s.catMouseGame([[2,5],[3],[0,4,5],[1,4,5],[2,3],[0,2,3]]))
最后
以上就是单纯绿草为你收集整理的913. Cat and Mouse的全部内容,希望文章能够帮你解决913. Cat and Mouse所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复