1 class Solution {
2 public double knightProbability(int N, int K, int r, int c) {
3 if(K == 0) return 1;
4 double[][][] dp = new double[K+1][N][N];
5 int[][] move = {{1,2}, {2,1}, {-1,-2}, {-2,-1}, {-1,2}, {-2,1},{1,-2},{2,-1}};
6 dp[0][r][c] = 1;
7 for(int i = 1; i <= K; i++){
8 for(int row = 0; row < N; row++){
9 for(int col = 0; col < N; col++){
10 if(dp[i-1][row][col] != 0){
11 for(int k = 0; k < 8; k++){
12 // System.out.println((col + move[k][1]) >=0);
13 int x = row + move[k][0];
14 int y = col + move[k][1];
15 if(x >=0 && x < N && y >=0 && y < N){
16 dp[i][x][y] += dp[i-1][row][col]/8;
17
18 }
19 }
20 }
21 }
22 }
23 }
24 double count = 0;
25 for(int i = 0; i < N; i++){
26 for(int j = 0; j < N; j++){
27 count += dp[K][i][j];
28 }
29 }
30 return count;
31
32 }
33 }