溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

棧實(shí)現(xiàn)一個(gè)小迷宮

發(fā)布時(shí)間:2020-07-10 22:51:29 來源:網(wǎng)絡(luò) 閱讀:536 作者:suntrace 欄目:編程語言

概括:實(shí)現(xiàn)迷宮的算法主要在于查找和回溯。從入口開始之后我們所查找的每一個(gè)位置都要去判斷它的另外三個(gè)方向(不包括剛剛走過的路徑)的路徑能不能通,如果能通則到下個(gè)位置,并將上個(gè)位置進(jìn)行標(biāo)注。在將此位置作為當(dāng)前位置繼續(xù)走。如果一個(gè)位置的另外三個(gè)方向都不能通過,則需要回溯,一直回溯到可以通過的位置。我們需要將走過的路徑進(jìn)行標(biāo)注,以便回溯的時(shí)候更加快捷。

棧實(shí)現(xiàn)一個(gè)小迷宮

首先我們從起始位置開始一直沿橙色路線走下去,將走過的路徑標(biāo)記為2,最后將會(huì)走入死胡同,然后沿著紫色的路徑進(jìn)行回溯知道有同路。

下面我們來看一下實(shí)現(xiàn)代碼

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();
		}			

	}

此程序是通過壓棧,和出棧來實(shí)現(xiàn)。首先我們來簡單的了解一下棧,棧是只能從一個(gè)口進(jìn)行pop與push,正是因?yàn)闂5倪@個(gè)特點(diǎn),我們?cè)谧呙詫m時(shí)可以將能走通的路徑壓入棧中,在進(jìn)入死胡同的時(shí)候可以進(jìn)行回溯只需要出棧就可以。


博主第一次寫,寫得不好的地方希望大家多多包涵棧實(shí)現(xiàn)一個(gè)小迷宮

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI