真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

棧---解決迷宮問題

  迷宮問題,是棧的一個經(jīng)典應(yīng)用。在今多年的面試題中特別常見。本博主呢,也就研究了一二。

成都網(wǎng)站建設(shè)、成都網(wǎng)站制作的開發(fā),更需要了解用戶,從用戶角度來建設(shè)網(wǎng)站,獲得較好的用戶體驗。成都創(chuàng)新互聯(lián)公司多年互聯(lián)網(wǎng)經(jīng)驗,見的多,溝通容易、能幫助客戶提出的運營建議。作為成都一家網(wǎng)絡(luò)公司,打造的就是網(wǎng)站建設(shè)產(chǎn)品直銷的概念。選擇成都創(chuàng)新互聯(lián)公司,不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來訪用戶感受到浩方產(chǎn)品的價值服務(wù)。

  若有一迷宮,如何尋找通路?

  解題思路:

     迷宮,可將其看成一個二維數(shù)組。給定一個入口,需要判斷此入口的上下左右是否越界,是否有通路點。若有通路點,將此點前一個通路點記錄并將其置為非0(防止訪問下一個通路點時再次判斷)。繼續(xù)尋找下一個通路,...以此類推。若查找不到通路點,則需要回溯。判斷是否還有其他通路。

回溯呢,就是將從記錄的通路點回退。此特征呢,和我們的棧很相似。所以,棧就在此處派上用場嘍。

    那么如何判斷迷宮是否有通路呢?

    判斷條件:(1)有通路。當(dāng)行或者列到達(dá)邊界時即可判斷。

              (2)無通路。當(dāng)回溯時,需要從棧中取出元素。當(dāng)棧為空時即可判斷。

  假設(shè)有如下迷宮。(迷宮中0為通路)入口點(2,0)。

棧---解決迷宮問題

分析:

    看到此迷宮,可將其看成二維數(shù)組。但是在程序中不可能一個一個輸入(若迷宮很大呢)。所以可將其以文件的形式讀取。我們看到在此迷宮處,有一個通路點處有兩條通路,若先走下面,行到達(dá)邊界處,則可直接得出有通路。若先右方,最終無通路可走,則需要回溯,在進(jìn)一步的判斷。當(dāng)回溯到岔路口時,發(fā)現(xiàn)下方還有路可走。繼續(xù)向下走,最終行到達(dá)邊界處,即有通路。

程序?qū)崿F(xiàn):

"Maze.h"

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
#include 
#define N 10
using namespace std;

struct Pos
{
	int _row;//行
	int _col;//列
};

//從文件中讀出數(shù)據(jù),并以一位數(shù)組存放
void GetMaze(int *a,int n) 
{
	FILE* f = fopen("test.txt","r");
	assert(f);
	for(int i=0;i=0)&&(next._row=0)&&
		(next._col& path)
{
	 Pos cur = entry;
	 path.push(cur);
	 while(!path.empty())
	 { 
		 a[cur._row*n+cur._col] = 2;//壓棧后將其置為2,防止再次訪問到
		 if((cur._col == n-1)||(cur._row == n-1))//通路條件,行或列到達(dá)邊界
		 {
			 return true;
		 }
		 //上
		 Pos next = cur; //將上一個通路點保存
		 next._row--;
		 if(PathIsAccess(a,n,next))//是否越界
		 {
			 cur = next;
			 path.push(cur);
			 continue;
		 } 
		  //左
		 next = cur;
		 next._col--;
		 if(PathIsAccess(a,n,next))
		 {
			 cur = next;
			 path.push(cur);
			 continue;
		 } 
		 //右
		 next = cur;
		 next._col++;
		 if(PathIsAccess(a,n,next))
		 {
			 cur = next;
			 path.push(cur);
			 continue;
		 }
		 //下
		 next = cur;
		 next._row++;
		 if(PathIsAccess(a,n,next))
		 {
			 cur = next;
			 path.push(cur);
			 continue;
		 }
		 cur = path.top();//回溯
		 path.pop();
	 }
	return false;
}
void Test()
{
	int a[N][N] = {};
	GetMaze((int *)a,N);
	PrintMaze((int *)a,N);

	stack path;
	Pos entry = {2,0};
	bool ret = MazePath((int *)a,N,entry,path);

	cout<<"是否有通路"<

測試結(jié)果:

(1)先走右方(出現(xiàn)回溯)

棧---解決迷宮問題

(2)先走下方

棧---解決迷宮問題


本文名稱:棧---解決迷宮問題
本文網(wǎng)址:http://weahome.cn/article/psjico.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部