简单的有限状态机
来源:互联网 发布: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;}