用棧解決迷宮問題求出路徑

2021-09-02 18:31:09 字數 2182 閱讀 4392

1.用棧解決迷宮問題,比較暴力,實際上是經過大量的試錯才得出的路徑

問題分析

a.首先畫出圖,我用1代表牆,用0代表非牆。

b.首先要規定入口的座標位置

c.然後規定尋找的方向規則比如 先每到乙個位置先看下該點的左側是否非牆,如果是返回該點的座標並將該點對應的下標(在之後要用該下標解析出對應的座標)入棧,如果是牆的話,就看該點的下面是否非牆…總之我規定的順序是左-下-右-上。(這個也是該**的靈魂所在)。

d.上面當你遇到死胡同時該怎麼辦,那麼就要考慮出棧了(這時就要將下標套現成座標)然後再進行上述的方向判斷,但是你想想是不是還欠點什麼,當你第一次判斷該點的下方可行的時候將該點進棧,當你出去的時候在進行判斷,是不是還要進入該點的下方,那麼此時就會陷入死迴圈,別急,那麼我們就需要設定乙個判斷是否來過該點的標誌visited[2]=,0代表沒來過,1代表來過,所以在最開始的時候要遍歷圖將圖全部初始化為未來過。

#include

#include

#include

#define maxsize 100

typedef

struct

stack,

*seqstack;

void

initstack

(seqstack s)

//初始化要將位址傳進去

void

push

(seqstack s,

int way)

//入棧

else

}void

pop(seqstack s)

//出棧讓其返回座標

else

}int

*ispass

(seqstack s,

char map[

10],int visited[

10],int

*arr)

//將標號入棧

}else

if(map[arr[0]

+1][arr[1]

]!=1)

//下}

else

if(map[arr[0]

][arr[1]

+1]!=

1)//右}

else

if(map[arr[0]

-1][arr[1]

]!=1)

//上}

else

//遇到死胡同該怎麼辦將ij點的資訊出棧

return arr;

}//方向判斷

void

print

(seqstack s)

}void

graph

(char map[

10])else

else}}

printf

("\n");

}}intmain()

,,,,

,,,,

,};graph

(map)

;int visited[10]

[10]=

; seqstack s;

s =(seqstack)

malloc

(sizeof

(stack));

//定義物件

initstack

(s);

//初始化

int i =

1, j =1;

visited[i]

[j]=1;

int arr[2]

=;dowhile(!

(arr[0]

==8&&arr[1]

==8))

;/*printf("找到的路徑圖如下:\n");

for (i = 0; i < s->top; i++)

*/printf

("找到的路徑圖如下:\n");

迷宮問題(輸出路徑)

迷宮問題 time limit 1000 ms memory limit 65536 kb 64bit io format i64d i64u description 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求...

用棧解決迷宮問題(輸出所有路徑和最短路徑)

include includeusing namespace std define m 4 行數 define n 4 列數 define maxsize 100 棧最多元素個數 int mg m 2 n 2 struct migong stack maxsize path maxsize 定義棧和...

老鼠走迷宮問題,求出所有路徑

本次所練習使用的主要方法是遞迴 所要注意的主要問題是 要確定起訖點的相對位置,否則又由於遞迴 的順序會漏掉一些可行路徑 先橫向 縱向接近目標點,然後再橫向 縱向遠離目標點 最好對應 例如 假設訪問的順序是下上右左 相對於乙個固定的矩陣 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 ...