#include <iostream> #include <stdio.h> #define MAXSIZE #define M 8 #define N 8 using namespace std; int mg[m+2][n+2]= {{1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,0,0,1,1,0,0,1}, {1, 0, 1,1,1,0,0,0,0,1}, {1,0,0,0,1,0,0,0,0,1}, {1,0,1,0,0,0,1,0,0,1}, {1,0,1,1,1,0,1,1,0,1}, {1,1,0,0,0,0,0,0,0,1}, {
1,1,1,1,1,1,1,1,1,1}};
typedef struct {int i;
Int J;
int di;
} Box;
typedef struct {Box data[maxsize];
int top;
} Sttype;
BOOL Mgpath (int xi,int yi,int xe,int ye) {int i,j,k,di,find;
Sttype St;
St.top=-1;
st.top++;
St.data[st.top].i=xi;st.data[st.top].j=yi;
St.data[st.top].di=-1;
Mg[xi][yi]=-1;
while (st.top>-1) {i=st.data[st.top].i;
J=ST.DATA[ST.TOP].J;
Di=st.data[st.top].di;
if (I==xe&&j==ye) {printf ("Path: \ n"); for (k=0; k<=st.top; k++) {printf ("\ t (%d,%d)", st.data[k].i,st. DATA[K].J);
if ((k+1)%5==0) printf ("\ n");
} printf ("\ n");
return true;
} find=0;
while (di<4&&find==0) {di++;
Switch (DI) {case 0:i=st.data[st.top].i-1;
J=ST.DATA[ST.TOP].J;
Break
Case 1:I=ST.DATA[ST.TOP].I;
j=st.data[st.top].j+1;
Break
Case 2:i=st.data[st.top].i+1;
J=ST.DATA[ST.TOP].J;
Break
Case 3:i=st.data[st.top].i-1;
J=st.data[st.top].j-1;
Break
} if (mg[i][j]==0) find=1;
} if (find==1) {st.data[st.top].di=di;
st.top++;
St.data[st.top].i=i;
St.data[st.top].j=j;
St.data[st.top].di=-1; Mg[i][j]=-1;
} else {mg[st.data[st.top].i][st.data[st.top].j]=0;
st.top--;
}} return false;
} int Main () {if (!mgpath (1,1,m,n)) printf ("no solution");
return 0; }
Run: