题目


解题代码
class Solution { static int N = 55; static int [][][] f = new int[2 * N * N][N][N]; int [][] g; int n; public int catMouseGame(int[][] graph) { g = graph; n = g.length; for(int k = 0 ; k < 2 * n * n; k++) { for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++ ) { f[k][i][j] = -1; } } } return dfs(0,1,2); } // 0:draw 平局 / 1:mouse / 2:cat int dfs(int k, int a, int b ) { int ans = f[k][a][b]; if(a == 0) ans = 1; else if(a == b) ans = 2; else if(k >= 2* n * n) ans = 0; else if(ans == -1) { if(k % 2 == 0) { //mouse boolean win = false,draw = false; for(int ne : g[a]) { int t = dfs(k + 1, ne, b); if(t == 1) win = true; else if( t == 0) draw = true; if(win) break; } if(win) ans = 1; else if(draw) ans = 0; else ans = 2; } else { boolean win = false,draw = false; for(int ne : g[b] ) { if(ne == 0) continue; int t = dfs(k + 1, a,ne); if(t == 2) win = true; else if(t == 0) draw = true; if(win) break; } if(win) ans = 2; else if(draw) ans = 0; else ans = 1; } } f[k][a][b] = ans; return ans; }}