当前位置: 首页 > article >正文

使用 Mermaid 绘制 UML 时序图:用算法方式剖析“过河卒”

“过河卒” 是一道经典的编程题目,背景设定通常为棋盘场景,有一个卒子要从棋盘的起始位置到达特定目标位置,且棋盘上存在一些障碍物限制卒子的行进路线。
在这里插入图片描述

首先,要明确棋盘的布局,确定起点、终点以及障碍物的坐标位置。例如,将棋盘抽象为二维数组,每个格子对应数组中的一个元素,用特定值表示起点、终点、障碍物与可通行路径。这一步就像是绘制地图,为卒子的行动规划好场地。
接着,分析卒子的移动规则。在中国象棋规则下,卒子只能向前、向左或向右移动(过河前),过河后还能向下移动。这意味着在代码实现中,需要根据卒子所处的位置(是否过河)来判断其下一步可行的移动方向,构建出卒子的移动逻辑树,清晰呈现每一步可能的走向。

一、方法选择

对于 “过河卒” 问题,递推和递归两种方法都可尝试。
递推方法是从初始状态开始,依据已知的前一步状态,逐步推导出后续状态,通过循环迭代的方式,一层一层地计算出到达每个格子的路径数量。它的优点在于效率相对较高,因为避免了大量重复的函数调用开销,只需按照既定顺序依次更新每个格子的状态值即可,代码执行流程较为直观。
递归方法则是将问题不断分解为相似的子问题,从目标状态回溯到初始状态。比如,要计算到达终点的路径数,先递归地计算到达终点前一步的各个位置的路径数,再汇总得出最终结果。递归方法的优势在于代码结构相对简洁,易于理解问题的本质,但缺点是存在大量重复计算,当棋盘规模较大时,可能会导致栈溢出等效率问题。综合来看,如果追求更高的执行效率,尤其是在处理大规模棋盘数据时,递推方法更为合适;若侧重于快速实现原型,理解问题求解逻辑,递归方法可以作为前期探索的手段。

二、优化算法

在初步选定方法后,以递推方法为例进行算法优化。
在递推过程中,利用空间换时间的策略,创建一个与棋盘大小相同的二维数组 dp,用于存储到达每个格子的路径数量。初始化起点位置的路径数为 1,然后按照卒子的移动规则进行循环遍历棋盘。对于可通行的格子,其路径数量等于上方、左方(未过河前)或上方、左方、下方(过河后)相邻可通行格子的路径数之和,即 dp[i][j] = dp[i - 1][j] + dp[i][j - 1](未过河情况,假设 i 表示行,j 表示列),若考虑过河后的规则,再加上 dp[i + 1][j]。同时,遇到障碍物时,直接将对应格子的路径数置为 0。通过这样的动态规划思想,避免了重复计算每个格子的路径,大大提高了算法效率。

1, Mermaid 绘制的 “过河卒” 问题求解的 UML 时序图示例:

卒子 棋盘 动态规划数组 获取棋盘信息 返回棋盘布局 初始化动态规划数组 数组初始化完成 根据位置判断移动方向 更新当前位置路径数(上方和左方) 更新当前位置路径数(上方、左方和下方) alt [卒子未过河] [卒子已过河] 将路径数置为0 累加路径数 alt [遇到障碍物] [遇到可通行路径] loop [棋盘遍历] 检查是否到达终点 结束遍历 继续移动 alt [到达终点] [未到达终点] 输出路径总数 卒子 棋盘 动态规划数组

2,描述用户登录系统的过程:

用户 登录系统 数据库 登录请求(用户名、密码) 验证用户信息 返回验证结果 返回登录结果(成功/失败) 用户 登录系统 数据库

说明:

  • 参与者
    • User:用户模块,代表用户输入登录信息。
    • LoginSystem:登录系统模块,处理用户的登录请求和数据库交互。
    • Database:数据库模块,存储用户信息并进行验证。
  • 消息传递
    • 用户向登录系统发送登录请求,包含用户名和密码。
    • 登录系统向数据库发送验证请求,检查用户名和密码是否匹配。
    • 数据库返回验证结果(成功或失败)给登录系统。
    • 登录系统将最终的登录结果(成功或失败)返回给用户。
  • 用途
    • 清晰地展示了用户登录系统各模块之间的交互顺序和数据流向。
    • 有助于理解系统的逻辑流程和模块之间的依赖关系。
      这个示例使用了 Mermaid 的 sequenceDiagram 语法,通过定义参与者和消息传递步骤,简洁明了地展示了用户登录系统的时序图。

http://www.kler.cn/a/552008.html

相关文章:

  • 04.类和对象(下)(初始化列表、static静态成员、友元friend[类外函数使用类私有成员]、内部类、匿名对象等)
  • 【DL】浅谈深度学习中的知识蒸馏 | 2019 CVPR | 中间层知识蒸馏
  • 说说高级java每日一道面试题-2025年2月13日-数据库篇-请说说 MySQL 数据库的锁 ?
  • Annie导航2.0 新增加5个模版 开源免授权
  • 【前端框架】深入探讨 Vue 3 组件生命周期的变化和最佳实践
  • 电子电气架构 --- 电器模通化设计
  • 制造运营管理(MOM)与仓库管理系统(WMS)何以相辅相成对企业的生产管理进行提升
  • restful 状态码
  • es6新特性
  • Python Spider
  • linux篇---输入sudo后不需要输入密码
  • 【etcd】ubuntu22安装,与redis对比的区别
  • 深入解析 MySQL 数据删除操作:DELETE、TRUNCATE 与 DROP 的原理与选择
  • JavaScript系列(76)--浏览器API深入
  • 最新智能优化算法: 中华穿山甲优化( Chinese Pangolin Optimizer ,CPO)算法求解23个经典函数测试集,MATLAB代码
  • Scikit-Learn系列:BaseEstimator类实践指南
  • 用户管理中心---前端页面设计测试登录功能
  • js闭包,跨域
  • UDP与TCP
  • 神经网络实验——MLP