add: 220217-CN [golang]
This commit is contained in:
parent
5bbf4b7ae5
commit
7f8c641b8f
|
|
@ -0,0 +1,39 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func isValid(n, x, y int) bool {
|
||||||
|
return x >= 0 && y >= 0 && x < n && y < n
|
||||||
|
}
|
||||||
|
|
||||||
|
func knightProbability(n, k, row, column int) float64 {
|
||||||
|
var dX = [8]int{-2, -1, 1, 2, 2, 1, -1, -2}
|
||||||
|
var dY = [8]int{1, 2, 2, 1, -1, -2, -2, -1}
|
||||||
|
// dp[k -> remaining step][x][y]
|
||||||
|
var dp, dpNext [25][25]float64
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
for j := 0; j < n; j++ {
|
||||||
|
dp[i][j] = 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i := 0; i < k; i++ {
|
||||||
|
for x := 0; x < n; x++ {
|
||||||
|
for y := 0; y < n; y++ {
|
||||||
|
dpNext[x][y] = 0.0
|
||||||
|
for idx := 0; idx < 8; idx++ {
|
||||||
|
if isValid(n, x+dX[idx], y+dY[idx]) {
|
||||||
|
dpNext[x][y] += dp[x+dX[idx]][y+dY[idx]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dpNext[x][y] /= 8.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dp = dpNext
|
||||||
|
}
|
||||||
|
|
||||||
|
return dp[row][column]
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println(knightProbability(1, 0, 0, 0))
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue