在Python中寻找骑士可以移动但不离开棋盘的位置的百分比

在Python中寻找骑士可以移动但不离开棋盘的位置的百分比

假设我们有四个值 n、x、y 和 k。这里 n 表示 n x n 的棋盘,x,y 坐标表示一个骑士放置在 (x,y)。骑士必须恰好取 k 步,每一步都可以随机均匀地移动 8 个方向之一。我们必须找到骑士在取 k 步后仍然位于棋盘上的概率机会(最接近的整数)。我们必须遵循一个条件,即一旦它离开就不能再进入棋盘。

因此,如果输入是 n = 8,(x = 0,y = 0),k = 1,则输出将为 50,因为这里我们有 8×8 的棋盘,骑士的初始位置为 (1, 1)。它可以取 k = 1 步。一步之后,它仅在 8 个位置中的 4 个位置上位于棋盘内,其他位置上位于棋盘外。所以是 50% 。

在Python中寻找骑士可以移动但不离开棋盘的位置的百分比

为了解决这个问题,我们将按照以下步骤进行−

  • 制作移动列表 [(1, 2) ,(1, -2) ,(-1, 2) ,(-1, -2) ,(2, 1) ,(2, -1) ,(-2, 1) ,(-2, -1) ]
  • 定义一个函数 dfs()。这将采取 x,y,k
  • 如果 (x,y) 不在棋盘范围内,则
    • 返回 0
  • 如果 k 等于 0,则
    • 返回 1
  • s = 空列表
  • 对于所有移动的 (dx,dy) –
    • x = dfs(x + dx,y + dy,k-1)/ 8
    • 插入 x 到 s 中
  • 返回 s 中元素的总和
  • 从主方法中执行以下操作−
  • 返回(四舍五入结果(dfs(x,y,k)* 100))到最近的整数

让我们来看下面的实现,以获得更好的理解 –

更多Python相关文章,请阅读:Python 教程

例子

moves = [(1, 2), (1, -2), (-1, 2), (-1, -2), (2, 1), (2, -1), (-2, 1), (-2, -1)]
class Solution:
   def solve(self, n, x, y, k):
      def dfs(x, y, k):
         if x < 0 or y < 0 or x >= n or y >= n:
            return 0
         if k == 0:
            return 1
         return sum(dfs(x + dx, y + dy, k - 1) / 8 for dx, dy in moves)
      return int(dfs(x, y, k) * 100)
ob = Solution()
n = 8
x = 1
y = 1
k = 1
print(ob.solve(n, x, y, k))

输入

8, 1, 1, 1

输出

0

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程