應用棧求解迷宮問題(C++實現)

來源:互聯網
上載者:User

標籤:棧   c++   迷宮   

棧是資料結構中一種重要的線性結構,限定僅在表尾進行插入和刪除操作的線性表,因此我們也可以認為它是一種特殊的線性表。由於棧的這個特點,我們又可以稱其為後進先出的結構。:

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/7E/DF/wKioL1cLi_vRu4ebAAARqXsqTA8989.png" title="捕獲.PNG" alt="wKioL1cLi_vRu4ebAAARqXsqTA8989.png" />

       由於棧具有後進先出的性質我們可以利用,是程式設計中一個有用的工具。利用棧我們可以來實現數制轉換、尾碼運算式求值、迷宮求解等等。在書本上我們可以看到用C語言實現的簡單思路,但是程式仍舊存在許多bug。今天,我想嘗試用強大的C++來實現。

      迷宮問題的求解思路大致則是從入口出發,順著某一方向向前探索,若能走通,則繼續向前探索;若不能走通,則換一方向進行探索,直至所有可能的通路都探索完為止。利用棧的特性,我們可以將探索過可通的路依次進棧,如果遇到不通的路則進行出棧操作,進行回退,重複探索。

       ps:為了方便起見我利用了一個記事本來存放迷宮,用1表示不通,0表示通路。將走過的路程標註為2.

代碼實現:

struct Pos //可通過下標訪問位置{int _ROW;int _COL;};void GetMaze(int *a,int n)//從檔案中讀出迷宮地圖{FILE* fout=fopen("Maze.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‘){a[i*n+j]=ch-‘0‘;++j;}else{   continue;}}}fclose(fout);}bool CheckIsAccess(int *a,int n,Pos next)//檢查是否為通路{assert(a);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()){Pos next=cur;a[cur._ROW*n+cur._COL]=2;if(next._ROW==n-1) /*|| next._ROW==0 || next._COL==n-1 ||  next._COL==0*/{return true;}//判斷上下左右是否為通路 next=cur;next._ROW--;// 上if(CheckIsAccess(a,n,next)){cur=next;path.push(cur);continue;}next=cur;next._ROW++;//下if(CheckIsAccess(a,n,next)){cur=next;path.push(cur);continue;}next=cur;next._COL--;//左if(CheckIsAccess(a,n,next)){cur=next;path.push(cur);continue;}next=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;}}





本文出自 “七月朔風” 部落格,請務必保留此出處http://luminous.blog.51cto.com/10797288/1762736

應用棧求解迷宮問題(C++實現)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.