/**
* 實驗題目:
* 求路徑和路徑條數問題
* 實驗目的:
* 領會基本遞迴演算法設計和遞迴執行過程
* 實驗內容:
* 有乙個m x n的網格,現在乙個機械人位於左上角,該機械人在任何位置上時,
* 只能向下或者向右移動一步,問機械人達到網格的右下角(1,1)位置的所有可能的
* 路徑條數,並輸出所有的路徑。以m=2,n=5為例說明輸出所有路徑的過程。
*/#include
#define max_size 100
typedef struct
pathtype; // 路徑元素型別
int path_count = 0; // 路徑編號
/*----------------------------求解從(m,n)到目的地(1,1)的路徑條數------------------------*/
/*** 演算法思路:
* 設f(m,n)為從(m,n)到(1,1)的路徑條數,其遞迴模型為:
* 1、當m<1或者n<1時,f(m,n)=0
* 2、當m=1並且n=1時,f(m,n)=1
* 3、當m>1或者n>1時,可從(m,n)向下移動一步,對應的路徑條數為f(m-1,n),也可以向右移動一步
* 對應的路徑條數為f(m,n-1)。也就是其他情況:f(m,n)=f(m-1,n)+f(m,n-1)
*/static int path_num(int m, int n)
/*----------------------------輸出從(m,n)到目的地(1,1)的所有路徑------------------------*/
static void disp_path(int m, int n, pathtype path, int d)
else // 其他情況 // f(m,n)=f(m-1,n)+f(m,n-1)
}int main(int argc, char *ar**)
測試結果:
m = 2, n = 5的路徑條數:5
路徑1: (2,5) (1,5) (1,4) (1,3) (1,2) (1,1)
路徑2: (2,5) (2,4) (1,4) (1,3) (1,2) (1,1)
路徑3: (2,5) (2,4) (2,3) (1,3) (1,2) (1,1)
路徑4: (2,5) (2,4) (2,3) (2,2) (1,2) (1,1)
路徑5: (2,5) (2,4) (2,3) (2,2) (2,1) (1,1)
迷宮問題(求最短路徑長度和最短路徑)
描述 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。輸入乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。輸出左上角到右下角的最短路徑,格式如樣例所示。樣例輸入 0 1...
用棧 求迷宮問題(最短路徑和全部路徑)
這是資料結構的作業,便找書邊看網上,然後自己慢慢寫出來的,這裡面主要是回溯法。因為課本上是列印出一條路徑,然後我在想怎樣能將所有的路徑都輸出來,方法 就是當求出一條路徑後,將出口點變成可以走的點 因為之前將其值變成了 1 並且將棧頂元素出棧,還需要得到現在棧頂元素的i,j,di值,將其賦出來。這裡的...
最短路徑條數問題 廣度優先搜尋
給定如圖所示的無向連通圖,假定圖中所有邊的權值都為1,顯然,從源點a到終點t的最短路徑有多條,求不同的最短路徑的數目。ps 上圖的a是第0號節點,b是第1號節點,其他同理。權值相同的最短路徑問題,則單源點dijkstra演算法退化成bfs廣度優先搜尋 廣度優先搜尋,即 從a 走一步可以到達b或e 走...