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 ...