#包括
#包括
15
定義M 15
定義n結構標記/ /定義迷宮的點坐標類型
{
詮釋x;
;
}
結構元素/ /“愛”堆棧元素。 。
{
整數X,Y,/ / x行,y列
整數D; / / D的未來方向
};
類型定義的結構LStack / /鏈棧
{
元素ELEM;
結構LStack下;
} * PLStack;
/ * ************堆棧功能**************** /
詮釋InitStack(PLStack&S)/ /構造空堆棧
{
S = NULL;
返回1;
}
詮釋StackEmpty(PLStack S)/ /以確定是否堆棧為空
{
如果(S == NULL)返回1
其他
0;
}
>詮釋推(PLStack&S的元素e)/ /壓入新的數據元素
{
PLStack P;
P =(PLStack)的malloc(大小(LStack)); BR /> P> ELEM = E;
P->下壹步= S;
S = P;
返回1;
}
詮釋流行音樂(PLStack&S,元素&E)/ /最上面的元素的堆棧
{
PLStack p;
(StackEmpty(S))
{
> E = S-> ELEM;
P = S;
S = S->下;
免費(P);
返回1;
}
其他
返回0;
}
/ ***************尋求的迷宮路徑功能* ********************** /
的無效MazePath(結構標記開始,結構標記結束,迷宮[M] [N],詮釋diradd的[ 4] [2])
{
INT I,J,D,A,B;
元素ELEM,E;
PLStack S1,S2;
InitStack (S1);
InitStack(S2);
的迷宮[start.x start.y] = / /入口點上的標記
elem.x = start.x
elem.y = start.y;
elem.d = -1; / /開始-1
推(S1,ELEM);
(!StackEmpty( S1))/ /堆棧也沒有單獨的路徑去
{
的流行(S1,ELEM);
= elem.x
J = elem.y;
D = elem.d +1; / /下方向
而(D <4)/ /測試東南西北各個方向
{
A = I + diradd [D] [0];
B?= J + diradd [D] [1];
(== end.x && B == end.y &&迷宮[A] [B] == 0)/ /出口
{
elem.x =;
elem.y = J;
elem.d = D;
推(S1 ELEM);
elem.x =
elem.y = B;
elem.d = 886,/ /方向輸出-1,以確定是否出口
推(S1,ELEM);
printf的(“\ N0 =東=南=西=北886的迷宮\ n \ n路徑:(行坐標和列坐標,方向)\ n”); <BR / (S1),/ /逆回家的。序列和輸出迷宮的路徑序列
{
流行(S1,電子);
推(S2,E);
}
而(S2) {
流行(S2,電子商務);
printf的(“ - >(%D,%D,%D)”前,EY,ED);
}
回報; / /兩個循環,原本與突破,但發現錯誤,出口將結束程序,或壹個不錯滴選擇返回O(∩_∩)O ...
}
(迷宮[A] [B] == 0)/ /找到前點的非出口
{
迷宮[A] [B] = 2 / /馬克走了這點
elem.x = I;
elem.y = J;
elem.d = D;
推(S1,ELEM); / /當前位置的堆棧
I = A; / /壹個點轉換電流點
J = B;
D = -1;
}
D + +
}
}
printf的(“未找到能夠走出這個迷宮路徑\ n”);
}
/ a>
/ *************建立迷宮******************* /
無效initmaze(INT迷宮[M] [N])
{
INT I,J;
INT M,N; / /迷宮行,列
printf的(“請進入迷宮的行數M =“);
scanf的(”為%d“,&M);
printf的(”請輸入迷宮的列數N =“) ;
scanf的(“%d”,&N);
printf的(“\ n請輸入迷宮的行和列:\ n用壹個空格分隔的0路1號代表長城\ n “,M,N);
為(i = 1; <= M + +)
(J = 1; <= N; J + +)
scanf函數(“%d”,和迷宮[I] [J]);
printf的(“妳建造迷宮是O(∩_∩)o ... \ n”);
(I = 0 <= M +1,我+ +)/ /添加圈墻
{
迷宮[I] [0] = 1;
迷宮[I] [N +1] = 1;
}
(J = 0; <= N +1; J + +)
{
迷宮[0] [J] = 1; ...... />迷宮[M +1] [J] = 1;
}
(I = 0; I <= M +1,我+ +)/ /輸出迷宮
{ BR />(J = 0; <= N +1; J + +)
printf的(“%d”的,迷宮[I] [J]);
printf的(“\ n “);
}
}
無效的主要()
{
詮釋STO [M] [N];
結構標記開始結束; / /開始結束的入口和出口協調
詮釋添加[4] [2] = {{0,1},{1,0},{0,-1},{-1,0 }} ;/ /線增量和列增量方向,由南,北,東,西
initmaze(STO);/ /創建壹個迷宮
printf的(“請輸入入口的橫坐標,縱坐標[逗號分隔的\ n“);
scanf的(”%d個,為%d“,&start.x和start.y);
printf的(”進入出口橫坐標,坐標[以逗號分隔] \ n“);
scanf的(”%d月%d“,&end.x,與end.y);
MazePath(起點,終點,申通快遞,添加); / /找到路徑
系統(“暫停”);
}