題目:迷宮問題
姓名:學號:
班級:指導教師:
2023年6月6日
1. 問題描述
輸入任意大小的迷宮資料,用遞迴和非遞迴方法求出一條走出迷宮的路徑,並將路徑輸出。
2. 設計思路
以 0和1分別表示迷宮中的通路和障礙,沒有通路則不顯示。未顯示為得出沒有通路的結論;
走迷宮的方式是乙個乙個的線路去試如果是死路的話就退回去,類似資料結構中棧的先進後出,所以可以用棧這種結構表示迷宮,通過不斷的試驗當試出最後的路線時輸出棧即可,由於它是不斷迴圈的實驗,所以可以採用鏈棧實現迷宮的求解。同時因為迷宮需要不斷重複的試驗,可以看成反覆的呼叫「迷宮「這個函式,這是典型的遞迴問題,所以也可以使用遞迴解決問題。另外由於資料物件是迷宮所以可以用0和1構建不同型別的迷宮更符合實際也更有樂趣。
3. 資料結構設計
前面提到要用到鏈棧和遞迴兩種方式操作;為了更好的以鍊錶作儲存結構的棧,可以用二維陣列儲存迷宮資訊,同時通路以三元組(i,j,d)的形式輸出,其中:(i,j)指示迷宮中的乙個座標,d表示走到下乙個座標的方向。這樣是路徑更加明顯,具體的資料結構為:
define maxsize 100
#define null 0
typedef struct定義迷宮
maze;
typedef struct point鏈棧的每個結點定義
point;
遞迴法像一位手握大權的領導。當他站在迷宮入口處時,他才懶得親自去走,這時這位領導會吩咐他的手下,讓他們分別向著迷宮的各個方向去探索;當遇到岔路口時留乙個人守在這裡,再分出幾股人,朝著每個方向繼續探索;最後總會有乙個人發現出口。發現出口的這個人將出口的位置報告給離他最近的路口處留守的人,再由這個人報告給上乙個路口的人,依次層層上報,最後訊息傳到了領導那裡,於是這位領導就順著這條畫好的通路大搖大擺地通過了迷宮。
所以具體的資料結構為:
#include<>
#include<>
#define maxsize 100
#define null 0
typedef struct定義迷宮
maze;
maze a;
typedef struct point鏈棧的每個結點定義
point;
4.功能函式設計
<1>乙個用於存放迷宮資訊的二維陣列maze
相關操作:
a.二維陣列的初始化maze creat()
b.陣列以指標形式在各個函式中傳遞。
c.可以改變陣列中的行數和列數。
<2>結構體point *next:指向下乙個結點
<3>結構體printmazepath:輸出迷宮路徑。
<4>結構體secret:搜尋迷宮路徑。
5.編碼實現
非遞迴:
#include<>
#include<>
#define maxsize 100
#define null 0
typedef struct
maze;
typedef struct point
point;
maze creat()
return a;
}int found(int x,int y,point *head)
return 0;
}point *secret(maze a
else j++;
}if(j>4)
{if(top!=null)
top=top->next;
if(top==null)return null;
資料結構課程設計報告 迷宮求解問題
課題設計1 迷宮求解 一.需求分析 本程式是利用非遞迴的方法求出一條走出迷宮的路徑,並將路徑輸出。首先由使用者輸入一組二維陣列來組成迷宮,確認後程式自動執行,當迷宮有完整路徑可以通過時,以0和1所組成的迷宮形式輸出,標記所走過的路徑結束程式 當迷宮無路徑時,提示輸入錯誤結束程式。二 概要設計 1.抽...
資料結構課程設計 迷宮 工作日誌
備註 必須與自己的專案緊密結合,按照工作階段和進度真實填寫。每人每週填寫1份,從第10周周一開始,共填寫個6周,每週五統一提交。備註 必須與自己的專案緊密結合,按照工作階段和進度真實填寫。每人每週填寫1份,從第10周周一開始,共填寫個6周,每週五統一提交。備註 必須與自己的專案緊密結合,按照工作階段...
資料結構課程設計報告
交通諮詢系統設計 不用輸入程式語句,也不用那個截圖 不用太著急,報告周五之前給我就行了 列印和壓縮包都要哈!對了,這段文字記得刪掉啊嘿嘿 題目名稱交通諮詢系統設計 院 系 管理學院 課程名稱資料結構課程設計 班級資訊 10 2 學生姓名呂德麗 指導教師李長雲 目錄一 需求分析及選題要求 3 1 問題...