迷宮實驗報告_第1頁
迷宮實驗報告_第2頁
迷宮實驗報告_第3頁
迷宮實驗報告_第4頁
迷宮實驗報告_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、word1、 實驗內(nèi)容3、 迷宮問題。假設(shè)迷宮由m行n列構(gòu)成,有一個出口和一個入口,入口坐標為1,1,出口坐標為m,n,試設(shè)計并驗證以下算法:找出一條從入口通往出口的路徑,或報告一個“無法通過的信息。1用C語言實現(xiàn)順序存儲隊列上的根本操作,然后利用該隊列的根本操作找出迷宮的一條最短路徑。2設(shè)計一個二維數(shù)組MAZEm+2n+2表示迷宮,數(shù)組元素為0表示該位置可以通過,數(shù)組元素為1表示該位置不可以通行。MAZE11、MAZEmn分別為迷宮的入口和出口。3輸入迷宮的大小m行和n列,動態(tài)生成二維數(shù)組;由隨機數(shù)產(chǎn)生0或1,建立迷宮,注意m*n的迷宮需要進行擴展,擴展局部的元素設(shè)置為1,相當于在迷宮周圍布

2、上一圈不準通過的墻。4要求輸出模擬迷宮的二維數(shù)組;假設(shè)存在最短路徑,那么有出口回溯到入口出隊列并利用棧實現(xiàn),再打印從入口到出口的這條路徑,例如1,1,.,i,j,.,m,n;假設(shè)沒有路徑,那么打印“No path。5迷宮的任一位置i,j上均有八個可移動的方向,用二維數(shù)組Direction存放八個方向的位置偏移量。Direction82=0,1,1,1,0,-1,-1,-1,1,-1,1,0,-1,0,-1,1;(6) 為防止出現(xiàn)原地踏步的情況需要標志已經(jīng)通過的位置,采用一個標志數(shù)組MARKm+2n+2,初值均為0,在尋找路徑的過程中,假設(shè)通過了位置i,j,那么將MARKij置為1。(7) 為了

3、記錄查找過程中到達位置i,j及首次到達i,j的前一位置i_pre,j_pre,需要記住前一位置i_pre,j_pre在隊列中的序號pre,即隊列中數(shù)據(jù)元素應(yīng)該是一個三元組i,j,pre。(8) 搜索過程簡單下:將入口MAZE11作為第一個出發(fā)點,依次在八個方向上搜索可通行的位置,將可通行位置i,j,pre入隊,形成第一層新的出發(fā)點,然后依次出隊,即對第一層中各個位置分別搜索它所在八個方向上的可通行位置,形成第二層新的出發(fā)點,.,如此進行下去,直至到達出口MAZEmn或者迷宮所有位置都搜索完畢為止。2、 實驗過程及結(jié)果1、 需求分析1、用棧的根本操作完成迷宮問題的求解,其中棧的根本操作作為一個獨

4、立的模塊存在。2、以二維數(shù)組Mm+2n+2表示迷宮,Mij 表示迷宮中相應(yīng)i,j位置的通行狀態(tài)0:表示可以通行,1:表示有墻,不可通行,完成迷宮的抽象數(shù)據(jù)類型,包括出口、入口位置等。3、用戶從屏幕上輸入迷宮,從鍵盤輸入迷宮的大小,即迷宮的長和寬(由于控制臺大小限制,輸入的長寬需在50以下),完成對應(yīng)迷宮的初始化。根據(jù)鍵盤輸入的迷宮規(guī)格隨機生成大小相同的迷宮,產(chǎn)生方塊的地方為墻,無方塊的地方可通過,如下例所示:如下所示:4、程序完成對迷宮路徑的搜索,為了更好地顯示出求解結(jié)果,如果存在路徑,那么以長方形形式將迷宮打印出來,而不是只按步輸出坐標,也便于檢查路徑的正確性,用特定符號標出迷宮的物理狀態(tài),

5、其中字符“#表示出口和入口,“<標記出可行的路徑;如果程序完成搜索后沒有找到通路,那么提示用戶“No Path!。如下圖:5、 程序執(zhí)行的命令: 創(chuàng)立初始化迷宮; 搜索迷宮; 輸出搜索到的最短路徑。2、 概要設(shè)計按照題目要求應(yīng)該用隊列實現(xiàn)路徑的存儲,但操作過程中遇到很多困難未能解決,應(yīng)選擇棧的操作來實現(xiàn)路徑的存儲1、迷宮的抽象數(shù)據(jù)類型定義:ADT Maze數(shù)據(jù)對象:D:=aij,Start,end|-20<=aij<20,Start,end(i,j)|0im+2,0jn+2,m,n0 數(shù)據(jù)關(guān)系:R=length,width length=<ai-1j,aij>|a

6、i-1,aijD i=1,m+2,j=1,n+2 width=<aij-1,aij>|aijaij-1D根本操作: SetMaze(&M) 初始條件:M已經(jīng)定義,M的下屬單元二維數(shù)組M.Mazerow+2d+2已存在,M.start,M.end也已作為下屬存儲單元存在 操作結(jié)果:構(gòu)成數(shù)據(jù)迷宮,用數(shù)值標識迷宮的物理狀態(tài),以0表示通路,以1表示障礙,由終端讀取迷宮空間大小,各點處的具體物理狀態(tài)及Start和End點位置,完成迷宮構(gòu)建 Pass(M, CurPos) 初始條件:目前迷宮狀態(tài)及當前位置 操作結(jié)果:完成相應(yīng)的搜索任務(wù),如果可行,那么返回1 NextPos(CurPos

7、, directionr) 操作結(jié)果:返回CurPOS位置在方向direction上的下一位置 SameSeat(Path,row,col) 操作結(jié)果:假設(shè)row,col位置是路徑Path中的一個點,那么返回TRUE PrintMaze(M) 初始條件:迷宮M已存在 操作結(jié)果:輸出字符標示的迷宮 MazePath(M,&Path) 初始條件:迷宮M已存在 操作結(jié)果:搜索迷宮,用path返回搜索所得路徑。如不存在,返回0 PrintPath(M,Path) 初始條件:迷宮M已存在 操作結(jié)果:迷宮M存在可行路徑那么將迷宮M及相應(yīng)最短路徑一起打印輸出ADT MAZE; 本程序模塊結(jié)構(gòu) 主函數(shù)

8、模塊void main()初始化迷宮和棧;創(chuàng)立迷宮;輸出迷宮;搜索路徑;輸出路徑; 棧模塊實現(xiàn)棧抽象數(shù)據(jù)類型; 迷宮模塊實現(xiàn)迷宮抽象數(shù)據(jù)類型;各模塊之間的調(diào)用關(guān)系如下:主程序模塊 迷宮模塊 棧模塊3、 詳細設(shè)計1、根本數(shù)據(jù)類型操作 棧模塊 typedef structint order;Position seat;int direction;SElemType;/步數(shù)、方向及位置/棧定義 typedef struct lnodeSElemType *base;SElemType *top;/設(shè)兩指針便于判斷棧是否為空int stacksize;/棧當前可使用的最大容量SqStack; 參數(shù)設(shè)置

9、:#define STACK_INIT_SIZE 100#define STACKINCRENT 10/-根本操作的算法描述-Status InitStack(SqStack &s) / 構(gòu)造一個空棧S.base=(SelemType )malloc(STACK_INIT_SIZE*SizeOf(SelemType);if(!S.base)exit(OVERLOW); / 存儲分配失敗S.top=S.base;S.stacksize=STACK_INIT_SIZE;return ok;Status StackEmpty(Sqstack &S) / 假設(shè)S為空返回TRUE,否那么

10、返回FALSEreturn S.base=S.top;Status GetTop(SqStack &S,Selemtype &e) / 棧不空,用e返回s的棧頂元素及OK,否那么返回ERRORif(S.top=S.base)return ERROR;e=*(S.top-1);return ok; Status Push(Sqstack &S,SelemType &e) / 插入元素e為新的棧頂元素if(S.top-S.base>=S.stacksize)/ 棧滿追加存儲空間S.base=(SelemType)realloc(S.base,(S.stacks

11、ize+STACKICREMENT)Sizeof(Selemtype);if(!S.base) exit(OVERFLOW) / 存儲分配失敗S.top=S.base+S.stacksize; / 確定新的棧頂指針S.stacksize+=STACKINCREMENT;/ 已分配空間增加 *S.top+=*e;return ok;Status Pop(Sqstack &s,SelemType &e)/ 假設(shè)棧不變,那么刪除棧頂元素,用e返回其值及ok,否那么falseif(S.top=o=S.base)return ERROR;*e=*-S.top; / 頂指針減小,用e返回其

12、數(shù)據(jù)return ok; 迷宮模塊: 迷宮的數(shù)據(jù)類型 #define MAXLENGTH 50/ 迷宮的最大長度#define MAXWIDTH 50/ 屏幕寬度,迷宮的最大寬度/元素類型typedef int Status;typedef structint row;int col;Position;/位置坐標/迷宮定義typedef int ElemType;typedef struct MAZEElemType MazeMAXLENGTHMAXWIDTH;/ 迷宮的物理狀態(tài)描述int length,width;/ 迷宮的大小Position start,end;/ 開始與結(jié)束位置與棧的單

13、元類型相同MAZE;/ “迷宮型數(shù)據(jù)迷宮模塊中的根本操作Status semaze(MAZE &M)Printf(“Please input the length and width of the MAZE);sanf(“rlength,width);for(k=0;k<width+2;k+)M->Maze0k=1;for(j=0;j<length+2;j+)M->Mazej0=1;for(j=0;j<length+2;j+)M->Mazejwidth+1=1;for(k=0;k<width+2;k+)M->Mazelength+1k=1

14、;/設(shè)置迷宮圍墻for(j=1;j<=length;j+)for(k=1;k<=width;k+)M->Mazejk=rand()%2;/隨機生成迷宮 M->length=length;M->width=width;M->start.row=1;M->start.col=1;M->end.row=M->length;M->end.col=M->width;M->MazeM->start.rowM->start.col=M->MazeM->end.rowM->end.col=0;/入口和出口設(shè)置

15、*/void PrintMaze(MAZE M) / 打印出迷宮,包括邊界printf("迷宮入口:1,1-用#表示n");printf("迷宮出口:%d,%d-用#表示n",M.length,M.width);for(row=0;row<M.length+2;row+)for(col=0;col<M.width+2;col+)if(row=1&&col=1)|(row=M.length&&col=M.width)printf("# ");/入口和出口用#表示elseprintf("

16、;%c ",M.Mazerowcol);printf("n");/ 用字符型打印輸出i,j狀態(tài)Status Pass( MAZE M,Position CurPos) / 判斷迷宮中當前位置CurPos上能否通過/ 如果通過返回1 if (M.MazeCurPos.rowCurPos.col=0) return 1; / 如果當前位置是可以通過,返回1 else return 0; / 其它情況返回0Position NextPos(Position CurPos, int direction) /返回當前位置在direction方向上的下一位置ReturnPos

17、.row=CurPos.row+Directiondirection-10;ReturnPos.col=CurPos.col+Directiondirection-11; return ReturnPos;Status SameSeat(SqStack Path,int row,int col)/位置row,col在路徑中時返回TRUEwhile(p<Path.top)if(Path.basenum.seat.row=row&&Path.basenum.seat.col=col)/路徑某一步所在的位置return TRUE;num+;p+;return FALSE;Sta

18、tus MazePath(MAZE M,SqStack *S) / 假設(shè)迷宮maze中從入口 start到出口 end的通道,那么求得一條存放在棧中/ 從棧底到棧頂,并返回SUCCESS;否那么返回FAILcurpos=M.start; / 設(shè)定"當前位置"為"入口位置"curstep=1; / 探索第一步/第一次查找路徑,設(shè)置5個方向(不遠離!終點的五個方向),假設(shè)找到那么返回SUCCESSdo if(Pass(M,curpos) / 當前位置可通過,即是未曾走到過的通道塊 M.Mazecurpos.rowcurpos.col=' '

19、/ 留下足跡 e.direction=1; e.order=curstep; e.seat=curpos; Push(S,&e); / 參加路徑 if(curpos.row=M.end.row&&curpos.col=M.end.col) / 到達終點出口 return SUCCESS; curpos=NextPos(curpos,1); / 下一位置在當前位置的右下方 curstep+; / 探索下一步 else / 當前位置不能通過 if(!StackEmpty(S) Pop(S,&e); while(e.direction=5&&!Stac

20、kEmpty(S) M.Mazecurpos.rowcurpos.col=' '/標記不能通過 Pop(S,&e); / 留下不能通過的標記,并退回一步 / while if(e.direction<5) e.direction+; GetTop(S,&te); if(e.direction=5&&te.direction=2) Pop(S,&e); e.direction+; Push(S,&e); / 換下一個方向探索 curpos=NextPos(e.seat,e.direction); / 當前位置設(shè)為新方向的相鄰塊

21、 / if / if / elsewhile(!StackEmpty(S);curpos=M.start; / 設(shè)定"當前位置"為"入口位置"curstep=1; / 探索第一步/如果第一次查找無結(jié)果那么再進行一次八個方向的查找,檢查是否存在第一次查找不到的特殊情況do if(Pass(M,curpos) / 當前位置可通過,即是未曾走到過的通道塊 M.Mazecurpos.rowcurpos.col=' ' / 留下足跡 e.direction=1; e.order=curstep; e.seat=curpos; Push(S,&

22、;e); / 參加路徑 if(curpos.row=M.end.row&&curpos.col=M.end.col) / 到達終點出口 /PrintPath(maze,S);/輸出路徑 return SUCCESS; curpos=NextPos(curpos,1); / 下一位置是當前位置的東鄰 curstep+; / 探索下一步 else / 當前位置不能通過 if(!StackEmpty(S) Pop(S,&e); while(e.direction=8&&!StackEmpty(S) M.Mazecurpos.rowcurpos.col='

23、; '/標記不能通過 Pop(S,&e); / 留下不能通過的標記,并退回一步 / while if(e.direction<8) e.direction+; GetTop(S,&te); if(e.direction=4&&te.direction=2) Pop(S,&e); e.direction+; Push(S,&e); / 換下一個方向探索 curpos=NextPos(e.seat,e.direction); / 當前位置設(shè)為新方向的相鄰塊 / if / if / elsewhile(!StackEmpty(S);ret

24、urn FAIL; / MazePathvoid PrintPath(MAZE M, SqStack Path)/ 將迷宮及路徑一起打印if(StackEmpty(&Path)printf("No Path!n");/路徑棧為空,那么提示無路徑exit(OVERFLOW);printf("nThe Path:n");for(row=0;row<M.length+2;row+)for(col=0;col<M.width+2;col+)if(SameSeat(Path,row,col)if(row=1&&col=1)|(r

25、ow=M.length&&col=M.width)printf("# ");elseprintf("> ");num+;p+;elseprintf("%c ",M.Mazerowcol);printf("n"); 主函數(shù)算法:void main()MAZE M;SqStack path;InitStack(&path);SetMaze(&M);PrintMaze(M);MazePath(M,&path);PrintPath(M,path); 函數(shù)的調(diào)用關(guān)系反映了本演示程

26、序的層次結(jié)構(gòu)迷宮處理工作棧設(shè)置mainInitStack MazePath PrintPath PrintMaze Pass SetMaze SameSeat NextPos Push GetTop Pop StackEmpty 4、 調(diào)試分析1、開始沒有將Mnm.start.end設(shè)置為MAZE 型數(shù)據(jù)的下屬單元,使得各個迷宮操作的函數(shù)參數(shù)十分散雜,調(diào)試時各參數(shù)關(guān)系不易把握。2、另行設(shè)置PrintPath函數(shù),使得終端輸出更加友好,并巧妙地將迷宮以特殊、明朗的字符輸出,效果更好。3、開始出棧入棧的條件沒有控制好,導致輸出時不是完整路徑,甚至出錯。4、選擇方向時有一定策略,開始選擇時按照順時針

27、依次讀取方向,發(fā)現(xiàn)太耗時且效果不好,容易出現(xiàn)不必要的彎折走法,后來通過控制方向順序,即第一方向為東南方,然后再東方、南方.,選取越靠近出口的方向為優(yōu)先方向,因為這樣的話搜索路徑時自然會本著路徑最短的原那么向出口處行進,那么找到的路徑自然是最短路徑之一。5、由于八個方向的特殊性,根據(jù)方向的順序,搜索路徑時仍會出現(xiàn)多走的情況,比方先往東再往西南,其實是可以直接往南的,因此為了防止這種情況,在入棧時還要先進行這種情況的判斷,如是這種情況那么出棧將前一位置方向改變再入棧。6、為了便于找到最短路徑,起初只使用了靠近出口處的五個方向,但是發(fā)現(xiàn)有特殊情況存在時由于不能想遠離出口的方向行進而找不到路徑,因此在

28、搜索路徑時進行了兩次搜索,第一次使用五個靠進出口的方向搜索,找到路徑時那么返回SUCCESS,假設(shè)未搜索到那么再進行一次八個方向的搜索,即為了防止漏掉特殊情況,找到時那么返回SUCCESS,由于第一搜索無結(jié)果假設(shè)第二次搜索到路徑也只能是特殊情況,故也應(yīng)該是最短路徑之一。7、最大的問題是并沒有按照題目要求來做,因為題目中要求用隊列來存儲路徑,經(jīng)過實驗發(fā)現(xiàn)有很多問題難以解決,應(yīng)選擇了只用棧的方法來實現(xiàn)。5、 用戶說明 本程序的運行環(huán)境為windows 764位操作系統(tǒng),執(zhí)行文件為數(shù)據(jù)結(jié)構(gòu)迷宮.exe; 進入演示程序后,即顯示對話形式的提示操作過程, 1、提出輸入迷宮的大小2、按enter鍵輸出隨機

29、生成的迷宮3、按enter鍵開始搜索路徑搜索結(jié)果:The Path:輸出迷宮及路徑或者輸出No Path! 提示輸入迷宮大小后,用戶輸入所要處理迷宮的長row,寬col; 提示輸入迷宮后,用戶將迷宮輸入,0代表可行,1代表障礙; 按任意鍵開始后,程序自動進行對所建迷宮的搜索,并將搜索結(jié)果; 按任意鍵退出程序。6、 測試結(jié)果1、 無路徑:2、 找到最短路徑:7、 附錄源代碼及注釋#include "time.h"#include "stdio.h"#include "stdlib.h"#include "conio.h&quo

30、t;#define NULL 0#define TRUE 1#define FALSE 0#define SUCCESS 1#define FAIL 0#define OK 1#define ERROR 0#define OVERFLOW -1#define INFEASIBLE -2#define MAXLENGTH 50#define MAXWIDTH 50#define STACK_INIT_SIZE 100#define STACKINCRENT 10/元素類型typedef int Status;typedef structint row;int col;Position;/位置坐標

31、typedef structint order;Position seat;int direction;SElemType;/步數(shù)、方向及位置/棧定義typedef struct lnodeSElemType *base;SElemType *top;/設(shè)兩指針便于判斷棧是否為空int stacksize;/棧當前可使用的最大容量SqStack;/迷宮定義typedef int ElemType;typedef struct MAZEElemType MazeMAXLENGTHMAXWIDTH;int length,width;Position start,end;MAZE;/迷宮大小及出入口

32、位置/棧操作函數(shù)聲明Status InitStack(SqStack *S);/初始化Status StackEmpty(SqStack *S);/判空Status GetTop(SqStack *s,SElemType *e);/取棧頂元素Status Push(SqStack *S,SElemType *e);/入棧Status Pop(SqStack *s,SElemType *e);/出棧/迷宮操作函數(shù)說明void SetMaze(MAZE *M);/*設(shè)置迷宮,隨機生成*/void PrintMaze(MAZE M);/*輸出迷宮*/Status Pass(MAZE M, Posit

33、ion CurPos);/判斷當前位置是否可通Position NextPos(Position CurPos, int directionr);/下一位置Status SameSeat(SqStack Path,int row,int col);/找到迷宮中可行路徑的各個位置Status MazePath(MAZE M,SqStack *Path);/搜索迷宮路徑void PrintPath(MAZE M, SqStack Path);/假設(shè)迷宮M存在可行路徑那么將該路徑在迷宮中輸出/主函數(shù)void main()MAZE M;SqStack path;InitStack(&path)

34、;SetMaze(&M);PrintMaze(M);MazePath(M,&path);PrintPath(M,path);/迷宮操作void SetMaze(MAZE *M)int length,width,j,k;printf("Please input the length and width of the MAZE:nlength (0<length<=50):");scanf("%d",&length);printf("width (0<width<=50):");scanf(

35、"%d",&width);srand(unsigned)time(NULL);for(k=0;k<width+2;k+)M->Maze0k=1;for(j=0;j<length+2;j+)M->Mazej0=1;for(j=0;j<length+2;j+)M->Mazejwidth+1=1;for(k=0;k<width+2;k+)M->Mazelength+1k=1;/設(shè)置迷宮圍墻for(j=1;j<=length;j+)for(k=1;k<=width;k+)M->Mazejk=rand()%2;

36、/隨機生成迷宮M->length=length;M->width=width;M->start.row=1;M->start.col=1;M->end.row=M->length;M->end.col=M->width;M->MazeM->start.rowM->start.col=M->MazeM->end.rowM->end.col=0;/入口和出口設(shè)置*/void PrintMaze(MAZE M)int row,col;printf("迷宮入口:1,1-用#表示n");printf(

37、"迷宮出口:%d,%d-用#表示n",M.length,M.width);for(row=0;row<M.length+2;row+)for(col=0;col<M.width+2;col+)if(row=1&&col=1)|(row=M.length&&col=M.width)printf("# ");/入口和出口用#表示elseprintf("%c ",M.Mazerowcol);printf("n");Status Pass( MAZE M,Position Cur

38、Pos) if (M.MazeCurPos.rowCurPos.col=0) return 1; / 如果當前位置是可以通過,返回1 else return 0; / 其它情況返回0Position NextPos(Position CurPos, int direction) Position ReturnPos;int Direction82=1,1,0,1,1,0,-1,1,1,-1,0,-1,-1,0,-1,-1;/按一定次序依次設(shè)置八個方向ReturnPos.row=CurPos.row+Directiondirection-10;ReturnPos.col=CurPos.col+D

39、irectiondirection-11; return ReturnPos;Status SameSeat(SqStack Path,int row,int col)SElemType *p=Path.base;int num=0;while(p<Path.top)if(Path.basenum.seat.row=row&&Path.basenum.seat.col=col)/路徑某一步所在的位置return TRUE;num+;p+;return FALSE;Status MazePath(MAZE M,SqStack *Path) / 假設(shè)迷宮maze中從入口 st

40、art到出口 end的通道,那么求得一條存放在棧中/ 從棧底到棧頂,并返回SUCCESS;否那么返回FAILPosition curpos;int curstep;SElemType e,te;curpos=M.start; / 設(shè)定"當前位置"為"入口位置"curstep=1; / 探索第一步/第一次查找路徑,設(shè)置5個方向(不遠離!終點的五個方向),假設(shè)找到那么返回SUCCESSdo if(Pass(M,curpos) / 當前位置可通過,即是未曾走到過的通道塊 M.Mazecurpos.rowcurpos.col=' ' / 留下足跡

41、 e.direction=1; e.order=curstep; e.seat=curpos; Push(S,&e); / 參加路徑 if(curpos.row=M.end.row&&curpos.col=M.end.col) / 到達終點出口 return SUCCESS; curpos=NextPos(curpos,1); / 下一位置在當前位置的右下方 curstep+; / 探索下一步 else / 當前位置不能通過 if(!StackEmpty(S) Pop(S,&e); while(e.direction=5&&!StackEmpty

42、(S) M.Mazecurpos.rowcurpos.col=' '/標記不能通過 Pop(S,&e); / 留下不能通過的標記,并退回一步 / while if(e.direction<5) e.direction+; GetTop(S,&te); if(e.direction=5&&te.direction=2) Pop(S,&e); e.direction+; Push(S,&e); / 換下一個方向探索 curpos=NextPos(e.seat,e.direction); / 當前位置設(shè)為新方向的相鄰塊 / if

43、/ if / elsewhile(!StackEmpty(S);curpos=M.start; / 設(shè)定"當前位置"為"入口位置"curstep=1; / 探索第一步/如果第一次查找無結(jié)果那么再進行一次八個方向的查找,檢查是否存在第一次查找不到的特殊情況do if(Pass(M,curpos) / 當前位置可通過,即是未曾走到過的通道塊 M.Mazecurpos.rowcurpos.col=' ' / 留下足跡 e.direction=1; e.order=curstep; e.seat=curpos; Push(S,&e); /

44、 參加路徑 if(curpos.row=M.end.row&&curpos.col=M.end.col) / 到達終點出口 /PrintPath(maze,S);/輸出路徑 return SUCCESS; curpos=NextPos(curpos,1); / 下一位置是當前位置的東鄰 curstep+; / 探索下一步 else / 當前位置不能通過 if(!StackEmpty(S) Pop(S,&e); while(e.direction=8&&!StackEmpty(S) M.Mazecurpos.rowcurpos.col=' '/標記不能通過 Pop(S,&e); / 留下不能通過的標記,并退回一步 / while if(e.direction<8) e.direction+; GetTop(S,&te); if(e.directi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論