1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { public: double knightProbability(int N, int K, int r, int c) { vector<vector<double>> f(N, vector<double>(N)); f[r][c] = 1; int dr[] = {-2, -1, 1, 2, 2, 1, -1, -2}, dc[] = {1, 2, 2, 1, -1, -2, -2 ,-1}; while (K-- > 0) { vector<vector<double>> t(N, vector<double>(N)); for (int r = 0; r < N; ++r) { for (int c = 0; c < N; ++c) { if (f[r][c] < 1e-8) continue; for (int i = 0; i < 8; ++i) { int rr = r + dr[i], cc= c + dc[i]; if (rr < 0 || rr >= N || cc < 0 || cc >= N) continue; t[rr][cc] += f[r][c] * 0.125; } } } t.swap(f); } double res = 0; for (int r = 0; r < N; ++r) { for (int c = 0; c < N; ++c) { res += f[r][c]; } } return res; } };
|