简单的有限状态机

来源:互联网 发布:nginx php fpm 优化 编辑:程序博客网 时间:2024/06/10 20:10
#include <stdio.h>#define MAX_SIZE 8 int main(){  int matrix1[MAX_SIZE][MAX_SIZE] = {0};  int i = 0,state,count,line = 0,colum = 0 ; //初始化 i = 0, line = 0, colum = 0  enum {    m_right,//向右移动    m_down,//向下移动    m_left,//向左移动    m_up//向上移动  };  state = m_right;//初始化向右  count = MAX_SIZE * MAX_SIZE;//count 为矩阵元素的总数    while (i < count)//初始化 i = 0, 当 i < 矩阵元素总数的时候循环  {    switch(state)//状态选择    {      case m_right://如果是向右状态       state = m_down;//状态切换为向下状态       while(colum < MAX_SIZE)//如果colum 小于 MAX_SIZE       {         if(matrix1[line][colum] !=0) break;//如果 matrix1[line][colum] 不等于 0 //则说明 matrix1[line][colum] 已经赋值//所以退出循环         matrix1[line][colum++] = ++i;//matrix[line][colum] 赋值为 i + 1//因为当初 i 初始化为 0,但是应该从 1 开始,//所以先给 i + 1,然后赋值给matrix1       }       colum--;//列减一,退回没有赋值的列       line++;//行加一,切换到下一行       continue;//跳出 stitch, 进行下一次循环或者退出/*matrix1[line][MAX_SIZE]   ↓ * * * * * * * * * * * * * * * ← matrix1[line+1][MAX_SIZE-1] * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/       case m_down:       state = m_left;       while(line < MAX_SIZE)       {         if(matrix1[line][colum] !=0) break;         matrix1[line++][colum] = ++i;       }       line--;       colum--;       continue;      case m_left:       state = m_up;       while(colum >= 0)       {         if(matrix1[line][colum] !=0) break;         matrix1[line][colum--] = ++i;       }       line--;       colum++;       continue;      case m_up:       state = m_right;       while(line < MAX_SIZE)       {         if(matrix1[line][colum] !=0) break;         matrix1[line--][colum] = ++i;       }       line++;       colum++;       continue;    }  }    for (line = 0;line < MAX_SIZE; line++)  {    for(colum = 0;colum < MAX_SIZE; colum++)      printf("%3d",matrix1[line][colum]);     putchar('\n');  }//循环输出 matrix1  return 0;}

原创粉丝点击