棧實現一個小迷宮

歸納:實現迷宮的算法主要在於查找和回溯。從入口開始以後咱們所查找的每個位置都要去判斷它的另外三個方向(不包括剛剛走過的路徑)的路徑能不能通,若是能通則到下個位置,並將上個位置進行標註。在將此位置做爲當前位置繼續走。若是一個位置的另外三個方向都不能經過,則須要回溯,一直回溯到能夠經過的位置。咱們須要將走過的路徑進行標註,以便回溯的時候更加快捷。
算法

wKioL1cLoPezJvI8AAAldGWdSS8957.png

首先咱們從起始位置開始一直沿橙色路線走下去,將走過的路徑標記爲2,最後將會走入死衚衕,而後沿着紫色的路徑進行回溯知道有同路。ide

下面咱們來看一下實現代碼blog

bool MazePath(int* a,int n,const Pos& entry,stack<Pos>& path)
{
	Pos cur=entry;
	path.push(cur);
	while(!path.empty())
	{ 
		a[cur._row*n+cur._col]=2;
		if(cur._row==n-1)
		{
			return true;
		}
		else
		{		
			//上
		    Pos 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._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;
			}
			
		       cur=path.top();
			path.pop();
		}			

	}

此程序是經過壓棧,和出棧來實現。首先咱們來簡單的瞭解一下棧,棧是隻能從一個口進行pop與push,正是由於棧的這個特色,咱們在走迷宮時能夠將能走通的路徑壓入棧中,在進入死衚衕的時候能夠進行回溯只須要出棧就能夠。get


博主第一次寫,寫得很差的地方但願你們多多包涵C_0016.gifit

相關文章
相關標籤/搜索