C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之迷宮問(wèn)題
本文實(shí)例為大家分享了數(shù)據(jù)結(jié)構(gòu)c語(yǔ)言版迷宮問(wèn)題棧實(shí)現(xiàn)的具體代碼,供大家參考,具體內(nèi)容如下
程序主要參考自嚴(yán)蔚敏老師的數(shù)據(jù)結(jié)構(gòu)c語(yǔ)言版,在書(shū)中程序的大體框架下進(jìn)行了完善。關(guān)于迷宮問(wèn)題的思路可查閱原書(shū)。
#include<iostream> using namespace std; #define MAXSIZE 10 typedef int Status; typedef struct{ int x; int y; }Postype; typedef struct{ int ord; Postype seat; int dir; }SElemType;//棧的元素類(lèi)型 typedef struct{ //SElemType data[MAXSIZE]; SElemType* top; SElemType* base; }Stack;//棧的結(jié)構(gòu)類(lèi)型 typedef struct{ char arr[MAXSIZE][MAXSIZE]; }MAZETYPE;//迷宮結(jié)構(gòu)體 MAZETYPE maze; void InitMaze() { maze.arr[0][0] = maze.arr[0][1] = maze.arr[0][2] = maze.arr[0][3] = maze.arr[0][4] = maze.arr[0][5] = maze.arr[0][6] = maze.arr[0][7] = maze.arr[0][8] = maze.arr[0][9] = '1'; maze.arr[1][0] = maze.arr[1][3] = maze.arr[1][7] = maze.arr[1][9] = '1'; maze.arr[1][1] = maze.arr[1][2] = maze.arr[1][4] = maze.arr[1][5] = maze.arr[1][6] = maze.arr[1][8] = '0'; maze.arr[2][0] = maze.arr[2][3] = maze.arr[2][7] = maze.arr[2][9] = '1'; maze.arr[2][1] = maze.arr[2][2] = maze.arr[2][4] = maze.arr[2][5] = maze.arr[2][6] = maze.arr[2][8] = '0'; maze.arr[3][0] = maze.arr[3][5] = maze.arr[3][6] = maze.arr[3][9] = '1'; maze.arr[3][1] = maze.arr[3][2] = maze.arr[3][3] = maze.arr[3][4] = maze.arr[3][7] = maze.arr[3][8] = '0'; maze.arr[4][0] = maze.arr[4][2] = maze.arr[4][3] = maze.arr[4][4] = maze.arr[4][9] = '1'; maze.arr[4][1] = maze.arr[4][5] = maze.arr[4][6] = maze.arr[4][7] = maze.arr[4][8] = '0'; maze.arr[5][0] = maze.arr[5][4] = maze.arr[5][9] = '1'; maze.arr[5][1] = maze.arr[5][2] = maze.arr[5][3] = maze.arr[5][5] = maze.arr[5][6] = maze.arr[5][7] = maze.arr[5][8] = '0'; maze.arr[6][0] = maze.arr[6][2] = maze.arr[6][6] = maze.arr[6][9] = '1'; maze.arr[6][1] = maze.arr[6][3] = maze.arr[6][4] = maze.arr[6][5] = maze.arr[6][7] = maze.arr[6][8] = '0'; maze.arr[7][0] = maze.arr[7][2] = maze.arr[7][3] = maze.arr[7][4] = maze.arr[7][6] = maze.arr[7][9] = '1'; maze.arr[7][1] = maze.arr[7][5] = maze.arr[7][7] = maze.arr[7][8] = '0'; maze.arr[8][0] = maze.arr[8][1] = maze.arr[8][9] = '0'; maze.arr[8][2] = maze.arr[8][3] = maze.arr[8][4] = maze.arr[8][5] = maze.arr[8][6] = maze.arr[8][7] = maze.arr[8][8] = '0'; maze.arr[9][0] = maze.arr[9][1] = maze.arr[9][2] = maze.arr[9][3] = maze.arr[9][4] = maze.arr[9][5] = maze.arr[9][6] = maze.arr[9][7] = maze.arr[9][8] = maze.arr[9][9] = '1'; } Status initStack(Stack &s) { s.base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType)); if (!s.base) return 0; s.top = s.base; return 1; } void Push(Stack &s, SElemType e) { *s.top++ = e; } void Pop(Stack &s, SElemType &e) { e = *--s.top; } Status StackEmpty(Stack &s) { if (s.top == s.base) return 1; else return 0; } Status Pass(Postype curpos) { if (maze.arr[curpos.x][curpos.y] == '0') return 1; else return 0; } void Foot(Postype curpos) { maze.arr[curpos.x][curpos.y] = '*'; } void MarkPrint(Postype curpos) { maze.arr[curpos.x][curpos.y] = '!'; } Status StructCmp(Postype a, Postype b) { if (a.x = b.x&&a.y == b.y) return 1; else return 0; } //下一個(gè)位置 Postype NextPos(Postype CurPos, int Dir) { Postype ReturnPos; switch (Dir) { case 1: ReturnPos.x = CurPos.x; ReturnPos.y = CurPos.y + 1; break; case 2: ReturnPos.x = CurPos.x + 1; ReturnPos.y = CurPos.y; break; case 3: ReturnPos.x = CurPos.x; ReturnPos.y = CurPos.y - 1; break; case 4: ReturnPos.x = CurPos.x - 1; ReturnPos.y = CurPos.y; break; } return ReturnPos; } Status MazePath(Postype start, Postype end) { Stack s; SElemType e; initStack(s); Postype curpos = start; int curstep = 1; do{ if (Pass(curpos)) { Foot(curpos); e = { curstep, curpos, 1 }; Push(s, e); if (StructCmp(curpos, end)) return 1; curpos = NextPos(curpos, 1); curstep++; } else { if (!StackEmpty(s)) { Pop(s, e); while (e.dir ==4 &&!StackEmpty(s)) { MarkPrint(e.seat); Pop(s, e); } if (e.dir < 4 && !StackEmpty(s)) { e.dir++; Push(s, e); curpos = NextPos(e.seat, e.dir); } } } } while (!StackEmpty(s)); return 0; } int main() { InitMaze(); Postype s, e; s.x = s.y = 1; e.x = e.y = 8; if (MazePath(s, e)) printf("迷宮成功解密!\n"); else printf("解密失敗\n"); for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { printf("%c ", maze.arr[i][j]); } printf("\n"); } cout << "-=================================" << endl; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (maze.arr[i][j] == '*' || maze.arr[i][j] == '!') printf("%c ", maze.arr[i][j]); else cout << " "; } printf("\n"); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言實(shí)現(xiàn)走迷宮
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之迷宮求解問(wèn)題
- C語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)迷宮實(shí)驗(yàn)
- 基于C語(yǔ)言實(shí)現(xiàn)的迷宮算法示例
- C語(yǔ)言使用深度優(yōu)先搜索算法解決迷宮問(wèn)題(堆棧)
- C語(yǔ)言使用廣度優(yōu)先搜索算法解決迷宮問(wèn)題(隊(duì)列)
- C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)中求解迷宮問(wèn)題實(shí)現(xiàn)方法
- 基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的走迷宮游戲
- 基于C語(yǔ)言實(shí)現(xiàn)的迷宮游戲代碼
- C語(yǔ)言通過(guò)棧實(shí)現(xiàn)小人走迷宮
相關(guān)文章
快速掌握VC6.0中各種宏注釋?xiě)?yīng)用(附圖)
為了方便別人或自己閱讀自己的程序,注釋是堅(jiān)決不可少的,一個(gè)漂亮的程序,不是在于你應(yīng)用的技術(shù)多么高深,而是能夠把高深的技術(shù)描述的清楚易懂2013-01-01《C++ Primer》隱式類(lèi)類(lèi)型轉(zhuǎn)換學(xué)習(xí)整理
在本篇文章里小編給大家整理的是關(guān)于《C++ Primer》隱式類(lèi)類(lèi)型轉(zhuǎn)換學(xué)習(xí)筆記內(nèi)容,需要的朋友們參考下。2020-02-02C++實(shí)現(xiàn)LeetCode(127.詞語(yǔ)階梯)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(127.詞語(yǔ)階梯),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07Clion(CMake工具)中引入第三方庫(kù)的詳細(xì)方法
這篇文章主要介紹了Clion(CMake工具)中引入第三方庫(kù)的詳細(xì)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之簡(jiǎn)易計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之簡(jiǎn)易計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Qt編寫(xiě)地圖實(shí)現(xiàn)閃爍點(diǎn)圖的示例代碼
閃爍點(diǎn)圖的核心有三個(gè)要素,城市的名稱(chēng)、城市的經(jīng)緯度、對(duì)應(yīng)值的大小,當(dāng)值越大閃爍點(diǎn)也就越大,本文就來(lái)實(shí)現(xiàn)一下地圖閃爍點(diǎn)圖,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12