這是資料結構的作業,便找書邊看網上,然後自己慢慢寫出來的,這裡面主要是回溯法。
因為課本上是列印出一條路徑,然後我在想怎樣能將所有的路徑都輸出來,方法:就是當求出一條路徑後,將出口點變成可以走的點(因為之前將其值變成了-1),並且將棧頂元素出棧,還需要得到現在棧頂元素的i,j,di值,將其賦出來。
這裡的思路是這樣的,因為找最後乙個點的時候是找倒數第二個點的上下左右四個方位,假設說是路徑通暢的點是倒數第二個點的上面的點,當我們找另一條路徑時,那麼現在我們應該順時針從次棧頂右面的點試探,檢視是不是可行的點。
#include #define max 9999
int mg[6][6] = ,,,,,
};typedef struct box;
typedef struct sqstack;
int initsqstack(sqstack *s)
int destroy(sqstack *s)
int push(sqstack *s, box *e)
int gettop(sqstack *s, box *e)
int pop(sqstack *s, box *e)
int empty(sqstack *s)
//1是空,0是非空。
int man(sqstack *s)
int zmg(int x, int y, int xe, int ye)
printf("\n");
if (tp + 1 < minlen)
s.top = tp;
minlen = tp + 1;
}mg[i][j] = 0;
pop(&s, &e);
gettop(&s, &e);
i = e.i;
j = e.j;
di = e.di;
} fun = 0;
while (di < 4 && fun != 1)
if (mg[x1][y1] == 0)
fun = 1;
} if (fun == 1)
else
}printf("\n");
printf("最短路徑的長度%d,m:",minlen);
for(n=0;ndestroy(&s);
return 0;
}int main()
迷宮問題 壓棧 回溯 全部路徑 最短路徑
用迴圈模擬壓棧來實現迷宮問題 arg.att 這個狀態用來標記我們是否試走過 此處 的四個方位,因為0是牆,1是路,所以我們用2來表示我們試過此處的左邊能不能通行,3用來表示此處的上方是否通行,4表示右邊,5表示下邊。用6來表示出口。假如說試過左邊不能走,我們就將標記改為3,讓他繼續試上邊能不能走。...
迷宮問題(求最短路徑長度和最短路徑)
描述 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。輸入乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。輸出左上角到右下角的最短路徑,格式如樣例所示。樣例輸入 0 1...
用棧解決迷宮問題(輸出所有路徑和最短路徑)
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 定義棧和...