資料結構課程設計(十) 迷宮問題

2021-10-07 09:55:07 字數 2418 閱讀 9298

1、任務簡述:

設計非遞迴演算法,根據入口和出口位置將給定迷宮中的全部可行路線輸出,並標記出其中的最短路徑;

int mg[10]

[10]=

,,,,

,,,,

,,};

//該二維陣列表示迷宮,0表示可行,1表示不可行。

要求:

(1)提示使用者從鍵盤輸入入口位置和出口位置;

(2)輸出所有可行路線及其路徑長度(路徑中包含的點的個數),並標記出其中的最短路徑(最短路徑可能有一條或者若干條)

(3)如果入口與出口之間不存在路徑,也請給出相應的提示資訊;

2、演算法描述:

首先用寬搜來尋找最短路徑的長度,然後用深搜來找出所有路徑,並且標記出其中的最短的路徑。其中寬搜採用的是佇列,深搜採用的是棧。思路都是去尋找可以走的幾個方向,逐個判斷就行了。

3、源**:

#include

#include

#include

#define n 100

int mg[10]

[10]=

,,,,

,,,,

,,};

//該二維陣列表示迷宮,0表示可行,1表示不可行。

int flag[10]

[10]=

,,,,

,,,,

,,};

//該二維陣列表示迷宮,0表示可行,1表示不可行。

int ms[4]

[2]=

,,,}

;int

bfs(

int start_x,

int start_y,

int end_x,

int end_y)

;//寬度優先搜尋,尋找最短路徑,並且返回他最短路徑的節點個數。

void

dfs(

int k,

int start_x,

int start_y,

int end_x,

int end_y)

;//深度優先搜尋,尋找所有可行路徑

main()

intbfs

(int start_x,

int start_y,

int end_x,

int end_y)

//寬度優先搜尋,尋找最短路徑,並且返回他最短路徑的節點個數。

if(nx == end_x&&ny == end_y)}if

(flag ==1)

break

; head++;}

if(flag ==1)

else

return0;

}void

dfs(

int k,

int start_x,

int start_y,

int end_x,

int end_y)

//深度優先搜尋,尋找所有可行路徑

printf

("---有%d個節點\n\n"

,count)

; top--

; flag[cx]

[cy]=0

;continue;}

if(dir[top]==4

) nx = cx + ms[dir[top]][

0]; ny = cy + ms[dir[top]][

1]; dir[top]++;

if(flag[nx]

[ny]==0

)}printf

("一共有%d種走法"

,sum);}

//145行

4、執行結果

起點為:(1,1),終點為:(8,8)

由於迷宮中任意兩個點都是聯通的,我們修改了一下迷宮:

int mg[10][10]=,,,

,,,,

,,, }; //該二維陣列表示迷宮,0表示可行,1表示不可行。

然後尋找起點:(1,1),終點:(8,2):

5、總結

心得體會:

執行結果正確,輸出也是正序輸出,成功統計路徑數量,不過可以學習老師的system(「pause」),就是每輸出10個或20個停一下,再輸出。不過這個影響不大。

資料結構課程設計 迷宮問題課程設計報告

上學時沒學過資料結構和演算法,於是現在有機會就自學。下面是我最近在等待進入專案組期間,花了1小時學習了一下迷宮問題。下面是我學習時找到的一篇課程設計的報告,然後自己先看懂,然後又在vc6.0下執行了。迷宮問題 一 需求設計 以乙個m m 的方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式...

課程設計 迷宮問題

課程設計 迷宮問題 c 個人設計 2010 01 16 15 06 字型大小 大大 中中 小小 迷宮問題 1設計目的 要求 以乙個m n的長方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對任意設定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結論。基本要求 首先實現乙個以煉表作...

資料結構課程設計

資料結構課程設計 include define n 30 include include includeusing namespace std struct node typedef node phone,mingzi node hashnumble node hashname int hash1 ...