課程設計——迷宮問題(c++)
個人設計
2010-01-16 15:06
字型大小:
大大
中中
小小
迷宮問題
1設計目的、要求
以乙個m*n的長方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對任意設定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結論。
基本要求:
首先實現乙個以煉表作儲存結構的棧型別,然後編寫乙個求解迷宮的非遞迴程式。求得的通路以三元組(i,j,d)的形式輸出,其中:(i,j)指示迷宮中的乙個座標,d表示走到下一座標的方向,如:對於下列資料的迷宮,輸出的一條通路為:(1,1,1),(1,2,2),(3,2,3),(3,1,2),…。
(1)編寫遞迴形式的演算法,求得迷宮中所有可能的通路;
(2)以方陣形式輸出迷宮及其通路。
2設計原理
主要採取三大模組:主程式模組、棧模組和迷宮模組
棧模組:實現迷宮資料的抽象化和對迷宮資料的處理;
迷宮模組:實現迷宮資料抽象型別;
主程式模組:初始化迷宮模組。
3採用軟體、裝置
microsoft visual c++ 6.0 微型電子計算機
4設計內容
1、迷宮模組:
以二維陣列maze[m+2][n+2]表示迷宮,其中:maze[0][j]和maze[m+1][j](0<=j<=n+1)及maze[i][0]和maze[i][n+1] (0<=i<=n+1)為新增的一圈障礙。陣列中一元素值為0表示通路,1表示障礙,限定迷宮的大小m,n<=10。其中迷宮的入口位置和出口位置可由使用者隨時設定。
1.座標位置型別:
struct postype /* 迷宮座標位置型別 */
;2.迷宮型別:
#define maxlength 25 /* 設迷宮的最大行列為25 */
typedef int mazetype[maxlength][maxlength];
3.記錄座標的三個一元陣列:
int a[maxlength];
int b[maxlength];
int c[maxlength];
2、棧模組:
1.棧型別selemtype:
struct selemtype/* 棧的元素型別 */
;2.構造乙個棧selmtype:
struct sqstack //sqstack
; /* 順序棧 */
其中基本操作如下:
棧的初始化:
bool initstack(sqstack *s)
元素進棧:
bool push(sqstack *s,selemtype e)
*((*s).top)++=e;
return true;
}判斷棧是否為空:
bool stackempty(sqstack s)
刪除棧頂元素使之為空:
bool pop(sqstack *s,selemtype *e)
尋找公共路徑的思想圖如下:
設定當前為出始值的入口:
do否則
}bool mazepath(postype start,postype end) /* 演算法3.3 */
else
if(e.di<3) /* 沒到最後乙個方向(北) */}}
}while(!stackempty(s));
return false;
}3、主程式模組:
void main()
while(命令!=「退出」)
}程式如下:
void main()
cout<<"迷宮結構如下:"<>begin.x>>begin.y;
cout<<"請輸入終點的行數,列數:";
cin>>end.x>>end.y;
if(mazepath(begin,end)) /* 求得一條通路 */
;#define maxlength 25 /* 設迷宮的最大行列為25 */
typedef int mazetype[maxlength][maxlength]; /* 迷宮陣列[行][列] */
/* 全域性變數 */
mazetype m; /* 迷宮陣列 */
int curstep=1; /* 當前足跡,初值為1 */
int a[maxlength];
int b[maxlength];
int c[maxlength];
struct selemtype/* 棧的元素型別 */
;#define stack_init_size 10 /* 儲存空間初始分配量 */
#define stackincrement 2 /* 儲存空間分配增量 */
struct sqstack //sqstack
; /* 順序棧 */
bool pass(postype b)
void footprint(postype a)
postype nextpos(postype c,int di)
,,,}; /* */
/* 移動方向,依次為東南西北 */
c.x+=direc[di].x;
c.y+=direc[di].y;
return c;
}void markprint(postype b)
bool initstack(sqstack *s)
bool push(sqstack *s,selemtype e)
*((*s).top)++=e;
return true;
}bool stackempty(sqstack s)
bool pop(sqstack *s,selemtype *e)
bool mazepath(postype start,postype end) /* 演算法3.3 */
else
if(e.di<3) /* 沒到最後乙個方向(北) */}}
}while(!stackempty(s));
return false;
}void print(int x,int y)
cout<<"迷宮結構如下:"<>begin.x>>begin.y;
cout<<"請輸入終點的行數,列數:";
cin>>end.x>>end.y;
if(mazepath(begin,end)) /* 求得一條通路 */
else
cout<<"此迷宮沒有從入口到出口的路徑"< 上學時沒學過資料結構和演算法,於是現在有機會就自學。下面是我最近在等待進入專案組期間,花了1小時學習了一下迷宮問題。下面是我學習時找到的一篇課程設計的報告,然後自己先看懂,然後又在vc6.0下執行了。迷宮問題 一 需求設計 以乙個m m 的方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式... 1 任務簡述 設計非遞迴演算法,根據入口和出口位置將給定迷宮中的全部可行路線輸出,並標記出其中的最短路徑 int mg 10 10 該二維陣列表示迷宮,0表示可行,1表示不可行。要求 1 提示使用者從鍵盤輸入入口位置和出口位置 2 輸出所有可行路線及其路徑長度 路徑中包含的點的個數 並標記出其中的最... create database drug 藥品表 create table drug did nvarchar 10 primary key,dname nvarchar 50 not null,dimage nvarchar 100 not null,dmodel nvarchar 10 chec...資料結構課程設計 迷宮問題課程設計報告
資料結構課程設計(十) 迷宮問題
課程設計表