国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++數據結構關于棧迷宮求解示例

C++數據結構關于棧迷宮求解示例

2022-03-07 14:09笑霸final C/C++

這篇文章主要為大家介紹了C++數據結構關于棧的迷宮求解示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

 

一、實驗目的

理解棧的抽象數據類型定義及操作特點。掌握順序棧的存儲結構的描述。掌握順序棧的基本操作的實現方法。理解棧的廣泛應用。

 

二、預備知識

閱讀課程教材P44~45頁內容,掌握棧的邏輯定義及“后進先出”的特點,理解抽象數據類型棧的定義。閱讀課程教材P45~47頁內容,理解順序棧的存儲特點及存儲表示,掌握順序棧各種基本操作(InitStack、StackEmpty、GetTop、Push、Pop等)的實現方法。閱讀課程教材P50~52頁內容,理解“迷宮求解”問題的含義,體會求解過程中棧的應用。仔細分析主要實現算法,理解求解步驟和方法。

 

三、實驗內容

按如下要求編寫程序,進行調試,寫出調試正確的源代碼,給出測試結果。
1.完成順序棧的存儲表示,實現順序棧的各種基本操作,包括InitStack、StackEmpty、GetTop、Push、Pop等操作。
2.利用順序棧求解迷宮中從入口到出口的一條路徑,并輸出結果。
說明:
(1)使用二維數組maze描述迷宮,迷宮的規模及初態自定。
(2)路徑的輸出形式可用文字描述,也可用圖形描述。

 

定義一些代碼:

#include<iostream>
#include<cstdlib>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct {//棧元素類型
	int x;//坐標
	int y;//坐標
	int di;//方向
}position;
using namespace std;
typedef struct {//棧
	position *base;
	position *top;
	int stacksize;
}Stack;
/*************************迷宮**********************************/
int Maze[10][10] = {//迷宮 Maze(妹子)原型如下圖:1表示路不通0表示可以通過。
//   0 1 2 3 4 5 6 7 8 9 
	{1,1,1,1,1,1,1,1,1,1},//0
	{1,0,0,1,0,0,0,1,0,1},//1
	{1,0,0,1,0,0,0,1,0,1},//2
	{1,0,0,0,0,1,1,0,0,1},//3
	{1,0,1,1,1,0,0,0,0,1},//4
	{1,0,0,0,1,0,0,0,0,1},//5
	{1,0,1,0,0,0,1,0,0,1},//6
	{1,0,1,1,1,0,1,1,0,1},//7
	{1,1,0,0,0,0,0,0,0,1},//8
	{1,1,1,1,1,1,1,1,1,1} //9
};

C++數據結構關于棧迷宮求解示例

 

定義類

class boos {//創建了一個角色類
private:
	Stack sq_stack;//棧
	position temp;
public:
	/******************************棧的基本方法*******************/
	void InitStack() {//創建棧
	bool StackEmpty()//判斷是否空棧
	bool GetTop(position &temp)//獲得棧頂
	bool Push(position &temp)//入
	bool Pop(position &temp)//出棧
	void free_Stack()//釋放棧空間
	
/******************************走迷宮方法*******************/
	bool findMaze(int star_x, int star_y, int endr_x, int end_y) 
					//迷宮的入口和出口坐標
};

 

類的成員函數的一些說明:

這是一些基礎方法 用于對棧的操作。

void InitStack() {//創建空的棧
		sq_stack.base = (position *)malloc(sizeof(Stack)*STACK_INIT_SIZE);
		if (!sq_stack.base) exit(-1);
		sq_stack.top = sq_stack.base;/*FHL*/
		sq_stack.stacksize = STACK_INIT_SIZE;
		cout << "棧創建成功" << endl;
	}
	bool StackEmpty() {判斷是否空棧
		if (sq_stack.top == sq_stack.base)return 1;
		else 
			return 0;
	}
	bool GetTop(position &temp) {//得到棧頂元素
		if (StackEmpty())return false;
		 temp= *(sq_stack.top-1);
		 return true;
	}
	bool Push(position &temp){//入棧/*FHL*/
		if (sq_stack.top - sq_stack.base >= sq_stack.stacksize) {
			sq_stack.base = (position*)realloc(sq_stack.base

		 sizeof(position)*(sq_stack.stacksize + STACKINCREMENT));
			if(!sq_stack.base) exit(-1);/*FHL*/
			sq_stack.top = sq_stack.base + sq_stack.stacksize;
			sq_stack.stacksize += STACKINCREMENT;
		}
		
		*sq_stack.top = temp;
		sq_stack.top++;
		return true;
	}
	bool Pop(position &temp) {//出棧
		if (StackEmpty())  return 0; 
		 sq_stack.top--;
		 temp = *sq_stack.top;
		return 1;
	}
	void free_Stack() {
		free(sq_stack.base);
	}

 

找迷宮的方法(dfs算法)

bool findMaze(int star_x, int star_y, int endr_x, int end_y) {//迷宮的入口和出口坐標
		int i, j, k = 0;//i j表示目前的坐標
		int tep_di,next_x,tep_y;//下一步的坐標
		bool flag;
		position fan_maze[200];
		InitStack();//先創建空棧
		temp.x = star_x, temp.y = star_y, temp.di - 1;//開始位置
		Push(temp);//入棧操作。/*FHL*/
		Maze[star_x][star_y]=-1;//-1表示走過;
		while (!StackEmpty()) {//棧不為空
			GetTop(temp);/*FHL*/
			 i = temp.x, j = temp.y , tep_di=temp.di;
			if (i == endr_x && j == end_y) {
				cout << "找到走出迷宮的路" << endl;
				k = 0;
				while (!StackEmpty()) {
					Pop(temp);
					fan_maze[k] = temp;
					k++;//k指向下一個被插入的位置;
				}
				cout <<"起點:"<< "(" << fan_maze[k-1].x << "," << fan_maze[k-1].y << ")->" << endl;
				int count = 1;
				for(k-=2;k>0;k--) {
					cout<<"(" << fan_maze[k].x <<","<< fan_maze[k].y<<")->";
					if (count % 3 == 0) cout << endl;
					count++;
				}
				cout  << "(" << fan_maze[0].x << "," << fan_maze[0].y << ")" << "終點" << endl;//出口的位置
				free_Stack();//釋放申請的堆空間
				return true;
			}/*FHL*/
			flag = 0;
			while (tep_di < 4 && !flag) {
				tep_di++;
				if (tep_di == 0){ next_x = i;	tep_y = j + 1;}
				else if (tep_di == 1) { next_x = i + 1;tep_y = j; }
				else if (tep_di == 2) { next_x = i;tep_y = j - 1; }
				else { next_x = i - 1; tep_y = j; }
				
				if( Maze[next_x][tep_y] == 0 ) flag = 1;
			}
				if(flag) {
					(sq_stack.top-1)->di = tep_di;//記錄上次坐標走的方向。
					temp.x = next_x, temp.y = tep_y,temp.di=-1;
					Push(temp);//這次坐標入棧
					Maze[next_x][tep_y] = -1;//當前坐標標記為走過。
				}
				else {
					Pop(temp);
					Maze[temp.x][temp.y] = 0;
				}
			
		}/*FHL*/
		cout << "沒有找到對應的出口" << endl;
		free_Stack();//釋放申請的堆空間
		return false;
	}

};

 

主函數(創建對象)

int main() {
	boos L1;
	L1.findMaze(1,1,8,8);
	system("pause");/*FHL*/
	return 0;
}

 

運行的一些截圖:

 

1.當入口和終點一樣時:

int main() {
	boos L1;
	L1.findMaze(1,1,1,1);
	system("pause");
	return 0;
}

C++數據結構關于棧迷宮求解示例

 

2.終點是可以到達的路徑

2.1(8,8)是終點

int main() {
	boos L1;
	L1.findMaze(1,1,8,8);
	system("pause");
	return 0;
}

C++數據結構關于棧迷宮求解示例

2.2(8,2)是終點

int main() {
	boos L1;
	L1.findMaze(1,1,8,2);
	system("pause");
	return 0;
}

C++數據結構關于棧迷宮求解示例

 

3.出口不通的情況

int main() {
	boos L1;
	L1.findMaze(1,1,9,9);
	system("pause");
	return 0;
}

C++數據結構關于棧迷宮求解示例

以上就是C++數據結構關于棧迷宮求解示例的詳細內容,更多關于C++數據結構棧迷宮的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/weixin_52062043/article/details/121062726

延伸 · 閱讀

精彩推薦
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久精品一区二区三区四区 | 99热婷婷| www.欧美| 麻豆av电影在线观看 | 97超碰青青草 | 中文字幕视频在线 | 人人澡人人射 | 国产一区二区三区免费看 | 一区二区三区在线观看国产 | 色影视 | 日韩视频精品 | 久久在线看 | 日韩高清一区 | 激情综合色综合久久综合 | 久久精品无码一区二区日韩av | 日韩在线免费观看视频 | 亚洲视频在线播放 | 色狠狠综合天天综合综合 | 99精品一区二区三区 | 欧美成人精品一区二区三区 | 九九热精品视频在线观看 | 黄工厂精品免费观看 | 亚洲成人免费在线 | 久久精品麻豆 | 中文免费字幕 | 亚洲国产精品一区二区第一页 | 精品国产91亚洲一区二区三区www | 羞羞的视频在线免费观看 | 亚洲第一视频 | 北条麻妃99精品青青久久 | 综合99| 亚洲福利在线观看 | 人人射视频 | 午夜免费视频 | 隔壁老王国产在线精品 | 精品国偷自产国产一区 | 欧美成在线观看 | 亚洲专区中文字幕 | 午夜国产精品视频 | 欧美国产一区二区三区 | 久草中文在线观看 |