简单的有限状态机

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值