使用有限状态自动机,在某一位置,有四种状态,判断在该状态下如何移动,并且移动后转移到什么状态。
#include<iostream>
using namespace std;
#define R 1
#define D 2
#define LD 3
#define RU 4
int main(){
int n;
cin>>n;
int mat[n][n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>mat[i][j];
int y=0,x=0;
int state=R;
while(y!=n-1||x!=n-1)
{
switch(state)
{
case R:
if(x+1<n){
cout<<mat[y][x]<<" ";
x+=1;
if(y+1<=n-1)
state=LD;
else
state=RU;
}
else{
state=D;
}
break;
case LD:
if (x-1>=0&&y+1<=n-1)
{
cout<<mat[y][x]<<" ";
x=x-1; y=y+1;
}
else //进行状态转移时不移动,只变状态
{
if(y+1>n-1)
state=R;
else
state=D;
}