Leetcode打卡:骑士在棋盘上的概率

执行结果:通过

题目:骑士在棋盘上的概率

在一个 n x n 的国际象棋棋盘上,一个骑士从单元格 (row, column) 开始,并尝试进行 k 次移动。行和列是 从 0 开始 的,所以左上单元格是 (0,0) ,右下单元格是 (n - 1, n - 1) 。

象棋骑士有8种可能的走法,如下图所示。每次移动在基本方向上是两个单元格,然后在正交方向上是一个单元格。

每次骑士要移动时,它都会随机从8种可能的移动中选择一种(即使棋子会离开棋盘),然后移动到那里。

骑士继续移动,直到它走了 k 步或离开了棋盘。

返回 骑士在棋盘停止移动后仍留在棋盘上的概率 。

示例 1:

输入: n = 3, k = 2, row = 0, column = 0
输出: 0.0625
解释: 有两步(到(1,2),(2,1))可以让骑士留在棋盘上。
在每一个位置上,也有两种移动可以让骑士留在棋盘上。
骑士留在棋盘上的总概率是0.0625。

示例 2:

输入: n = 1, k = 0, row = 0, column = 0
输出: 1.00000

提示:

  • 1 <= n <= 25
  • 0 <= k <= 100
  • 0 <= row, column <= n - 1

代码以及解题思路

代码:

double knightProbability(int n, int k, int r, int c) {double dp1[n][n], dp2[n][n];memset(dp1, 0, sizeof(dp1));int dx[] = {-2, -2, -1, -1, 1, 1, 2, 2};int dy[] = {-1, 1, -2, 2, -2, 2, -1, 1};double (*pre)[n] = dp1, (*cur)[n] = dp2;for (int K = 1; K <= k; K++) {memset(cur, 0, sizeof(dp1));for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {for (int p = 0; p < 8; p++) {int cx = i + dx[p];int cy = j + dy[p];cur[i][j] += ((cx < 0 || cx >= n || cy < 0 || cy >= n) ? 1 : pre[cx][cy]) / 8;}}}double (*t)[n] = pre;pre = cur, cur = t; }return 1 - pre[r][c];}

解题思路:

  1. 初始化动态规划数组
    • 使用两个二维数组 dp1 和 dp2 来存储每一步移动后的概率。dp1 用于存储当前步的概率,dp2 用于存储下一步的概率。
    • 使用 memset 函数将 dp1 初始化为0,因为初始时骑士还未移动,所以所有位置的概率都是0(但这里实际上是为了后续计算方便,初始值对结果无影响,因为我们会从1开始累加概率)。
  2. 定义骑士的移动方向
    • 使用 dx 和 dy 数组来定义骑士的八个移动方向。
  3. 动态规划计算概率
    • 外层循环遍历每一步 K,从1到k
    • 在每一步中,首先使用 memset 将 dp2(即下一步的概率数组)初始化为0。
    • 然后,遍历棋盘上的每一个位置 (i, j),对于每个位置,遍历骑士的八个移动方向。
    • 计算骑士从当前位置 (i, j) 移动到下一个位置 (cx, cy) 的概率。如果 (cx, cy) 超出棋盘范围,则骑士“消失”在棋盘外,其概率为1(因为题目要求的是不在指定位置的概率,所以骑士离开棋盘也是一种“不在指定位置”的情况)。如果 (cx, cy) 在棋盘内,则概率是 pre[cx][cy] / 8,因为骑士有8种等可能的移动方式。
    • 将所有可能的移动概率累加到 cur[i][j] 中。
    • 交换 pre 和 cur 的指针,以便在下一步中使用新的概率数组。
  4. 返回结果
    • 经过 k 步后,pre[r][c] 存储的是骑士在 k 步后位于 (r, c) 的概率。
    • 因为题目要求的是不在 (r, c) 的概率,所以用 1 - pre[r][c] 来表示这个概率。

总结:

  • 该代码通过动态规划的方法,逐步计算骑士在每一步移动后到达每个位置的概率。
  • 通过交换 pre 和 cur 数组,实现了在每一步中基于前一步的概率来计算当前步的概率。
  • 最终返回的是骑士在 k 步后不在指定位置 (r, c) 的概率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/486114.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Java]项目入门

这篇简单介绍一些入门的有关项目和行业的知识&#xff0c;并带着实现一个小项目。便于已经编程入门的各位准备进阶到下一个阶段。 先大致地介绍&#xff0c;一个完整的项目(不看客户端、服务端的分类)基本可以划分为三部分&#xff1a; 1.前端。比如你现在看到的CSDN页面就是一…

全连接层与链式求导法则在神经网络中的应用

目录 ​编辑 引言 全连接层的工作原理 前向传播 反向传播 链式求导法则及其在神经网络中的应用 链式求导法则 应用于全连接层 计算梯度 结论 引言 在深度学习领域&#xff0c;全连接层&#xff08;Fully Connected Layer&#xff0c;FC&#xff09;和链式求导法则是…

泷羽Sec-星河飞雪-bp抓APP包的相关配置方法

免责声明 学习视频来自 B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 泷羽sec官网&#xff1a;http…

00. Nginx-知识网络

知识目录 语雀知识网络&#xff0c;点击“”-- 点击“”查看知识网络 01. Nginx-基础知识 02. Nginx-虚拟主机 03. Nginx-Web模块 04. Nginx-访问控制 05. Nginx-代理服务 06. Nginx-负载均衡 07. Nginx-动静分离 08. Nginx-平滑升级 09. Nginx-日志切割 10. Nginx-…

【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之后端环境搭建

【Springboot3vue3】从零到一搭建Springboot3vue3前后端分离项目&#xff0c;整合knef4j和mybaits实现基础用户信息管理 后端环境搭建1.1 环境准备1.2 数据库表准备1.3 SpringBoot3项目创建1.4 MySql环境整合&#xff0c;使用druid连接池1.5 整合mybatis-plus1.5.1 引入mybatie…

【大数据技术基础】 课程 第3章 Hadoop的安装和使用 大数据基础编程、实验和案例教程(第2版)

第3章 Hadoop的安装和使用 3.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台&#xff0c;为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的&#xff0c;具有很好的跨平台特性&#xff0c;并且可以部署在廉价的计算机集群中。H…

【Elasticsearch】ES+MySQL实现迷糊搜索

1. 技术选型 使用 Elasticsearch (ES) 结合 MySQL 进行数据存储和查询&#xff0c;而不是直接从 MySQL 中进行查询&#xff0c;主要是为了弥补传统关系型数据库&#xff08;如 MySQL&#xff09;在处理大规模、高并发和复杂搜索查询时的性能瓶颈。具体来说&#xff0c;ES 与 My…

Tomcat 的使用(图文教学)

Tomcat 的使用&#xff08;图文教学&#xff09; 前言一、什么是Tomcat&#xff1f;二、Tomcat 服务器和 Servlet 版本的对应关系三、Tomcat 的使用 1、安装2、目录介绍3、如何启动4、Tomcat 的停止5、如何修改 Tomcat 的端口号6、如何部暑 web 工程到 Tomcat 中 6.1 方式一6.…

Altium Designer学习笔记 31 PCB布线优化_GND处理

基于Altium Designer 23学习版&#xff0c;四层板智能小车PCB 更多AD学习笔记&#xff1a;Altium Designer学习笔记 1-5 工程创建_元件库创建Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制Altium Designer学习笔记 11-15 原理图的封装 编译 检查 _PCB封装库的创建Al…

前端知识1html

VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span&#xff1a; <span style"color: red;">hello</span> <span>demo</span> span实现&#xff1a; 标题…

Java项目实战II基于微信小程序的私家车位共享系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着城市化进程的加速&…

在google cloud虚拟机上配置anaconda虚拟环境简单教程

下载anaconda安装包 wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh 安装 bash Anaconda3-2022.10-Linux-x86_64.sh 进入base环境 eval "$(/home/xmxhuihui/anaconda3/bin/conda shell.bash hook)" source ~/.bashrc 安装虚拟环境…

天天 AI-241207:今日热点- Windsurf:在工程能力上进一步进化的Cursor

2AGI.NET | 探索 AI 无限潜力&#xff0c;2AGI 为您带来最前沿资讯。 Windsurf&#xff1a;在工程能力上进一步进化的Cursor 介绍了一个新的AI代码编辑器Windsurf&#xff0c;它被认为是Cursor的进化版&#xff0c;具有更强的工程能力。文章强调了Windsurf在自动化编码和系统…

数据结构---单链表

目录 一、概念 二、分类 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非循环 三、接口实现 1.定义结构 2、申请节点 3、尾插 4、头插 5、尾删 6、头删 7.查找&#xff0c;也可以充当修改 8、在pos之前插入x 9、在pos之后插入x ​编辑 10、删除pos位置 …

CSU课内课程资料【github仓库】

里面是我当时的PPT&#xff0c;作业答案&#xff0c;实验&#xff0c;还有一些笔记啥的&#xff0c;里面有的是他人的笔记和报告&#xff0c;等之后闲下来的话&#xff0c;我会删掉这部分&#xff0c;起码人家的笔记也是有隐私权的。关于实验&#xff0c;大多也是很普通&#x…

深算院崖山发布核心平替战略 加速金融数智化跃迁

2024年11月14日&#xff0c;由深圳计算科学研究院&#xff08;简称&#xff1a;深算院&#xff09;主办、深圳崖山科技有限公司&#xff08;简称&#xff1a;崖山科技&#xff09;和赛迪网承办的“2024国产数据库创新生态大会”在深圳成功举办。会上&#xff0c;崖山数据库重磅…

【Web】2023安洵杯第六届网络安全挑战赛 WP

目录 Whats my name easy_unserialize signal Swagger docs 赛题链接&#xff1a;GitHub - D0g3-Lab/i-SOON_CTF_2023: 2023 第六届安洵杯 题目环境/源码 Whats my name 第一段正则用于匹配以 include 结尾的字符串&#xff0c;并且在 include 之前&#xff0c;可以有任…

从零开始的vscode配置及安装rust教程

配置vscode的rust环境 下载安装vscodemac 环境 1. 下载安装rust2. 配置 mac vscode环境3. 创建一个测试项目 windows 环境 1. 安装c运行环境2. 安装配置rustup3. 配置windows vscode环境4. 创建一个测试项目 下载安装vscode 1.官网应用程序下载 vscode&#xff1a;https://…

小程序 - 美食列表

小程序交互练习 - 美食列表小程序开发笔记 目录 美食列表 功能描述 准备工作 创建项目 配置页面 配置导航栏 启动本地服务器 页面初始数据 设置获取美食数据 设置onload函数 设置项目配置 页面渲染 页面样式 处理电话格式 创建处理电话格式脚本 页面引入脚本 …

ip所属地址是什么意思?怎么改ip地址归属地

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识符&#xff0c;不仅关乎设备间的通信&#xff0c;还涉及到用户的网络身份与位置信息。IP所属地址&#xff0c;即IP地址的归属地&#xff0c;通常反映了设备连接互联网时的地理位置。本文将深入解析IP所属地址的含义&#…