您好,登錄后才能下訂單哦!
棧和隊列是數據結構中重要的部分,通過棧來實現走出迷宮。
1代表不能通行,0代表可以通行,將走的迷宮路線坐標不斷地存入棧中,并賦成2,分別判斷各個方向,如果是0則前進,1則判斷下個方向。
迷宮的地圖可以通過新建記事本,將地圖輸入。
代碼實現:
struct Pos { int _row;//行 int _col;//列 }; bool CheckIsAccess(int* a,int n,Pos next)//判斷是否超出迷宮范圍,是否可以前進 { if((next._row>=0)&&(next._row<n)&&\ (next._col>=0)&&(next._col<n)&&\ (a[next._row*n+next._col]==0)) return true; else return false; } bool MazePath(int* a,int n,Pos& entry,stack<Pos>& path) { Pos cur=entry; path.push(cur); while(!path.empty()) { a[cur._row*n+cur._col]=2;//走過的地方賦成2 if(cur._row==n-1)//判斷是否到達出口 { return true; } //分別判斷各個方向哪個可以前進 //上 Pos next=cur; next._row--; if(CheckIsAccess(a,n,next)) { cur=next; path.push(cur); continue; } //下 next=cur;//將位置恢復到cur,再進行其他方向的判斷 next._row++; if(CheckIsAccess(a,n,next)) { cur=next; path.push(cur); continue; } //左 next=cur;//將位置恢復到cur,再進行其他方向的判斷 next._col--; if(CheckIsAccess(a,n,next)) { cur=next; path.push(cur); continue; } //右 next=cur;//將位置恢復到cur,再進行其他方向的判斷 next._col++; if(CheckIsAccess(a,n,next)) { cur=next; path.push(cur); continue; } cur=path.top();//到達死角,回溯 path.pop(); } } void PrintMaze(int* a,int n)//打印迷宮 { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cout<<a[i*n+j]<<" "; } cout<<endl; } } void GetMaze(int* a,int n) { FILE* fout=fopen("MazeMap.txt","r"); assert(fout); for(int i=0;i<n;i++) { for(int j=0;j<n;) { char ch=fgetc(fout); if(ch=='0'||ch=='1')//只有是1或0的時候才將其存到二維數組中 { a[i*n+j]=ch-'0'; ++j; } else { continue; } } } fclose(fout); }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。