Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.89 KB | None | 0 0
  1. class Solution:
  2.     def bfs(self, N: int, K: int, r: int, c: int):
  3.         moves = [(-2, -1), (-2, 1), (-1, 2), (1, 2), (-1, -2), (1, -2), (2, -1), (2, 1)]
  4.         q = []
  5.         q.append((r, c, 1)) # (i, j, prob)
  6.         for _ in range(K):
  7.             tmp = dict()
  8.             for _ in range(len(q)):
  9.                 (i, j, prob) = q.pop(0)
  10.                 for mi, mj in moves:
  11.                     if 0 <= i + mi < N and 0 <= j + mj < N:
  12.                         if (i+mi, j+mj) in tmp:
  13.                             tmp[(i+mi, j+mj)] += prob / 8
  14.                         else:
  15.                             tmp[(i+mi, j+mj)] = prob / 8
  16.            
  17.             for k,v in tmp.items():
  18.                 q.append((k[0], k[1], v))
  19.         return sum([x[2] for x in q])
  20.            
  21.    
  22.     def knightProbability(self, N: int, K: int, r: int, c: int) -> float:
  23.         return self.bfs(N, K, r, c)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement