#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define n 10
typedef struct
{
int x;
int y;
}Coordinate;
int chessboard[8][8]={0};
Coordinate move[8]={{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}};
typedef struct
{
int ord;
Coordinate seat;
int di;
}SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack *s1)
{
s1->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s1->base)
exit(1);
s1->top=s1->base;
s1->stacksize=STACK_INIT_SIZE;
return (1);
}
SElemType Pop(SqStack*s,SElemType m)
{
m=*(--s->top);
return m;
}
int Push(SqStack *s1,SElemType m)
{
*(s1->top++)=m;
return 1;
}
int StackEmpty(SqStack *s)
{
if(s->base==s->top)
return (1);
else
return (0);
}
int Pass(Coordinate s)
{
if(chessboard[s.x][s.y]==0&&(s.x<=7)&&(s.x>=0)&&(s.y<=7)&&(s.y>=0))
return (1);
else
return (0);
}
Coordinate NextPos(Coordinate s,int i)
{
s.x=s.x+move[i].x;
s.y=s.y+move[i].y;
return(s);
}
void print()
{
int i,j=0;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
printf("%4d",chessboard[i][j]);
printf("\n");
}
}
void Horse(Coordinate start)
{
int curstep=0;
SqStack S;
SElemType e;
Coordinate curpos = start;
InitStack(&S);
do
{
if(Pass(curpos))
{
curstep++;
chessboard[curpos.x][curpos.y]=curstep;
e.seat=curpos;
e.ord=curstep;
e.di=0;
Push(&S,e);
if(curstep==64)
{
break;
}
else
{
curpos=NextPos(curpos,e.di);
}
}
else
{
if(!StackEmpty(&S))
{
Pop(&S,e);
if(e.di==7)
{
chessboard[e.seat.x][e.seat.y]=0;
}
while(e.di==7&&!StackEmpty(&S))
{
e=Pop(&S,e);
if(e.di==7)
chessboard[e.seat.x][e.seat.y]=0;
curstep=e.ord;
}
if(e.di<7)
{
e.di++;
Push(&S,e);
curpos=NextPos(e.seat,e.di);
}
}
}
}while(!StackEmpty(&S));
print() ;
}
int main()
{
int i,j;
Coordinate start;
printf("请输入初始位置\n");
scanf("%d %d",&start.x,&start.y);
Horse(start);
return 0;
}
转载请注明原文地址:https://blackberry.8miu.com/read-43191.html