1234567891011121314151617181920212223242526272829303132333435 |
- var detX = []int{1, -1, 1, -1, 2, -2, 2, -2}
- var detY = []int{2, 2, -2, -2, 1, 1, -1, -1}
- func knightProbability(N int, K int, r int, c int) float64 {
- dp := make([][]float64, N)
- for i := range dp {
- dp[i] = make([]float64, N)
- }
- dp[r][c] = 1.0
- for i := 0; i < K; i++ {
- ndp := make([][]float64, N)
- for j := range ndp {
- ndp[j] = make([]float64, N)
- }
- for y := 0; y < N; y++ {
- for x := 0; x < N; x++ {
- for j := 0; j < 8; j++ {
- ny, nx := y+detY[j], x+detX[j]
- if ny < 0 || N <= ny || nx < 0 || N <= nx {
- continue
- }
- ndp[y][x] += dp[ny][nx] / 8.0
- }
- }
- }
- dp = ndp
- }
- prob := 0.0
- for i := range dp {
- for _, p := range dp[i] {
- prob += p
- }
- }
- return prob
- }
|