各位大神帮我看下,一个马踏遍的程序,为啥后面运行时,程序自动关闭
#include#define N 8
typedef struct
{
int i1;
int j1;
int di1;
}Box;
typedef struct
{
int top;
Box data[N*N];
}sqstack;
bool hourse(int b[N][N],int x,int y)
{
int i,j,k=0,di,find;
sqstack st;
st.top=-1;
st.top++;
st.data[st.top].i1=x;//保存行号
st.data[st.top].j1=y;//保存列号
st.data[st.top].di1=-1;//保存所走的路径
b[x][y]=k;
while(st.top>-1)
{
i=st.data [st.top].i1;
j=st.data [st.top].j1;
di=st.data[st.top].di1;
find=0;
if(b[N][N]=N*N)
return true;
while(di<8&&find==0)
{
di++;
switch(di)
{
case 0:i=st.data[st.top].i1-2;
j=st.data[st.top].j1-1;
if(i<0||i>=N||j<0||j>=N)
di++;
else break;
case 1:i=st.data[st.top].i1-2;
j=st.data[st.top].j1+1;
if(i<0||i>=N||j<0||j>=N)
di++;
else break;
case 2:i=st.data[st.top].i1-1;
j=st.data[st.top].j1+2;
if(i<0||i>=N||j<0||j>=N)
di++;
else break;
case 3:i=st.data[st.top].i1+1;
j=st.data[st.top].j1+2;
if(i<0||i>=N||j<0||j>=N)
di++;
else break;
case 4:i=st.data[st.top].i1+2;
j=st.data[st.top].j1+1;
if(i<0||i>=N||j<0||j>=N)
di++;
else break;
case 5:i=st.data[st.top].i1+2;
j=st.data[st.top].j1-1;
if(i<0||i>=N||j<0||j>=N)
di++;
else break;
case 6:i=st.data[st.top].i1+1;
j=st.data[st.top].j1-2;
if(i<0||i>=N||j<0||j>=N)
di++;
else break;
case 7:i=st.data[st.top].i1-1;
j=st.data[st.top].j1-2;
if(i<0||i>=N||j<0||j>=N)
di++;
else break;
}
if((b[i][j])==0)find=1;//找到下一个可走的方块
}
if(find=1&&di<8)
{
st.data[st.top].di1=di;
st.top++;
st.data[st.top].i1=i;
st.data[st.top].j1=j;
k++;
b[i][j]=k;
}
else
{
b[st.data[st.top].i1][st.data[st.top].j1]=0;
k--;
st.top--;
}
}
return false;
}
void main()
{
int i,j,h,t;
bool flag;
int Board[N][N]={0};
printf("输入马踏遍开始的位置(0