题目
类型:动态规划
解题思路

代码
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:catint 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) { // mouseboolean 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 { // catboolean 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;}}
