求路徑和路徑條數問題

2021-09-10 02:28:03 字數 1318 閱讀 5267

/**

*    實驗題目:

*        求路徑和路徑條數問題

*    實驗目的:

*        領會基本遞迴演算法設計和遞迴執行過程

*    實驗內容:

*        有乙個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 走...