typedef struct{
int i; //當前方位的行號
int j; //當前方位的列號
int pre; //本路徑中上一方塊在隊列中的下標
} Box;
typedef struct{
Box data[MaxSize];
int front,rear ; //隊頭隊尾指針
} QuType;
bool mgpath(int xi,int yi,int xe,int ye){
int i,j,di,find=0;
QuType qu; //定義順序隊
qu.front=qu.rear=-1;
qu.rear++;
qu.data[qu.rear].i=xi;
qu.data[qu.rear].j=yi;
qu.data[qu.rear].pre=-1;
mg[xi][yi]=-1; //將其賦值爲-1,避免重複搜索此節點
while(qu.front!=qu.rear&&!find){
qu.front++;//出隊
i=qu.data[qu.front].i;
j=qu.data[qu.front].j;
if(i==xe&&j==ye){ //找到了出口,輸出路徑
find=1;
print(qu,qu.front);
return true;
}
for(di=0;di<4;di++){
switch di{
case 0:
i=qu.data[qu.front].i-1;
j=qu.data[qu.front].j;
break;
case 1:
i=qu.data[qu.front].i;
j=qu.data[qu.front].j+1;
break;
case 2:
i=qu.data[qu.front].i+1;
j=qu.data[qu.front].j;
break;
case 3:
i=qu.data[qu.front].i;
j=qu.data[qu.front].j-1;
break;
}
if(mg[i][j]==0){
qu.rear++; //將這個方塊出入到隊列中
qu.data[qu.rear].i=i;
qu.data[qu.rear].j=j;
qu.data[qu.rear].pre=qu.front;
mg[i][j]=-1;
}
}
}
return false;
}