C語言 資料結構中求解迷宮問題實現方法

2022-09-27 02:12:17 字數 964 閱讀 2268

c語言 資料結構中求解迷宮問題實現方法

在學習資料結構棧的這一節遇到了求迷宮這個問題,拿來分享一下~

首先求迷宮問題通常用的是「窮舉求解」 即從入口出發,順某一方向試探,若能走通,則繼續往前走,否則原路返回,換另乙個方向繼續試探,直至走出去。 

我們可以先建立乙個8*8的迷宮其中最外側為1的是牆

int mg[m+2][n+2]=,

, ,, ,

, ,, ,

,}如上所示,0對應通道方塊,1代表牆。對於迷宮中的每個方塊,有上下左右4個方塊相鄰,我們規定第i行第j列方塊的位置為(i,j) 規定上方方塊方位為0,順時針方向遞增編號。(i,j)上方的即為(i-1,j),下方(i+1,j),左方(i,j-1),右方(i,j+1).    為了方面回溯,我們需要有進棧出棧操作,所以我們來定義:

struct st[maxsize];//棧

int top=-1;//初始化棧頂指標

我們來看看文字過程~~

&nbs程式設計客棧p;  首先將入口進棧(初始方位為-1),在棧不空的情況下迴圈:取棧頂方塊(不退棧),若該方塊是出口,則退棧。若存在這樣的方塊,則將其方位儲存到棧頂元素中,並將這個可走的相鄰方塊進棧。 

對應的演算法:

void mgpath(int x1,int y1,int x2,int y2)

printf("\n"); //找到一條路徑後結束

return ;

} find=0;

while (di<4 && find==0)

if(mg[i] [j]==0) find=1;

} if (find==1)

else

} printf("沒有路徑可走!\n");

}當然我們也可以用佇列去求該迷宮的最優演算法,這只是乙個用來理解棧的例子~~~

本文標題: c語言 資料結構中求解迷宮問題實現方法

本文位址: /ruanjian/c/183596.html

資料結構 迷宮求解

定義迷宮 include seqstack.h define max row 6 最大行數 define max col 6 最大列數 typedef struct mazemaze void mazeinit maze maze size t i 0 for imap i j map i j vo...

資料結構 迷宮求解

include include int mg 10 10 地圖 int m 8 行數 int n 8 列數 typedef struct box 定義方塊型別 typedef struct sttype 定義順序棧型別 bool mgpath int xi,int yi,int xe,int ye ...

資料結構之迷宮求解問題(一)

我們小時候都玩過迷宮,走迷宮可以說是非常有意思了。而在我們大腦裡是如何對這個遊戲進行思考的呢?其實我們在玩這個遊戲的是,大多是一條路走到黑,如果到達出口那麼就走出來了,如果是死胡同,那麼回到剛才的分叉口,再找一條路再一條路走到黑,以此類推。而我們在實現迷宮求解的時候也是利用這種方法,這種方法又稱作回...