zoukankan      html  css  js  c++  java
  • 有限状态机(Finite-state machine, FSM)的C语言实现

    有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”,此后FSM将一直保持“消亡状态”。状态转换图中还有两个特殊状态:状态1称为“起始状态”,表示FSM的初始状态。状态6称为“结束状态”,表示成功识别了所输入的字符序列。

    在启动一个FSM时,首先必须将FSM置于“起始状态”,然后输入一系列字符,最终,FSM会到达“结束状态”或者“消亡状态”。

    有限状态机(Finite-state machine, FSM)的C语言实现

    状态机的要素

    状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。

    • 现态:是指当前所处的状态。

    • 条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。

    • 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。

    • 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

    c语言实现

    直接先上个图,就按照这个状态来写:

    有限状态机(Finite-state machine, FSM)的C语言实现

    当事件是1的时候,进入的是周一,它的下一个状态是周二。依次类推

    • 定义我们上图的状态

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 继续定义出触发的事件

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 定义状态表的数据结构

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 定义出FSM的状态表

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 状态机的注册和状态转移

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 事件处理的动作实现

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 再在主函数中调用就好了。

    看完整的代码:

    有限状态机(Finite-state machine, FSM)的C语言实现

    运行的效果:

    有限状态机(Finite-state machine, FSM)的C语言实现

    有限状态机(Finite-state machine, FSM)的C语言实现

  • 相关阅读:
    关于Maya Viewport 2.0 API 开发的介绍视频
    春节大假
    Some tips about the life cycle of Maya thread pool
    Can I compile and run Dx11Shader for Maya 2015 on my side?
    How to get current deformed vertex positions in MoBu?
    想加入全球首届的 欧特克云加速计划吗?
    三本毕业(非科班),四次阿里巴巴面试,终拿 offer(大厂面经)
    mac、window版编辑器 webstorm 2016... 永久破解方法。
    node 搭载本地代理,处理web本地开发跨域问题
    js 一维数组,转成嵌套数组
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/9129024.html
Copyright © 2011-2022 走看看