課程設計 迷宮問題

2021-05-21 14:05:17 字數 3300 閱讀 8350

課程設計——迷宮問題(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...