#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;
}
简单的有限状态机
最新推荐文章于 2022-11-24 20:40:09 发布