




免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
/base.h/- 公用的常量和類型 -#include#include #include #include /函數(shù)結(jié)果狀態(tài)代碼#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status; /函數(shù)的返回值typedef int DirectiveType; /下一個通道方向#define RANGE 100 /迷宮大小/2。/stack.h#define STACK_INIT_SIZE 100#define STACKINCREMENT 10/- 棧的順序存儲實(shí)現(xiàn) -typedef struct. int row; int col;PosType;typedef struct. int step; /當(dāng)前位置在路徑上的序號 PosType seat; /當(dāng)前的坐標(biāo)位置 DirectiveType di; /往下一個坐標(biāo)位置的方向SElemType;typedef struct. SElemType *base; SElemType *top; int stacksize;SqStack;/- 棧的基本操作的算法實(shí)現(xiàn) -Status InitStack(SqStack &s). s.base = (SElemType * ) malloc(STACK_INIT_SIZE * sizeof(SElemType); if(!s.base) exit(OVERFLOW); s.top=s.base; s.stacksize=STACK_INIT_SIZE; return OK;Status GetTop(SqStack s, SElemType &e ). if( s.top = s.base) return ERROR; e = *(s.top-1); return OK;Status Push(SqStack &s, SElemType e). if(s.top-s.base = s.stacksize). /棧滿,追加存儲空間 s.base = (SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType); if(!s.base) exit(OVERFLOW);s.top = s.base + s.stacksize; s.stacksize += STACKINCREMENT; *s.top+ = e; return OK;Status Pop(SqStack &s, SElemType &e). if(s.top=s.base)return ERROR; e = * -s.top; return OK;int StackEmpty(SqStack s). return s.base = s.top;Status ClearStack(SqStack &s). s.top = s.base; return OK;/3。/maze.h/- 迷宮程序 -/*/* 迷宮問題算法: 從入口出發(fā),順著某一個方向進(jìn)行探索,若能走通,則繼續(xù)前進(jìn);否則沿著原路退回,換一個方向繼續(xù)探索,直至出口位置,求得一條通路,假如所有可能的通路都探索到而未能達(dá)到出口,則所設(shè)定的迷宮沒有通路. 說明:可通: 未增走到過的通道快. */#define ROW 9 /迷宮的行數(shù)#define COL 8 /迷宮的列數(shù)typedef struct. int m,n; int arrRANGERANGE;MazeType; /迷宮類型Status InitMaze(MazeType &maze, int aCOL, int row, int col). /按照用戶輸入的row行和col列的二維數(shù)組(0/1) /設(shè)置迷宮maze的初值,包括加上邊緣一圈的值 for(int i=1;i=row;i+). for(int j=1;j=col;j+). maze.arrij = ai-1j-1; /加上圍墻 for(int j=0;j=col+1;j+). maze.arr0j = maze.arrrow+1j=1; for(i=0;i=row+1;i+). maze.arri0 = maze.arricol+1=1; maze.m = row, maze.n = col; return OK;Status Pass(MazeType maze,PosType curpos). /判斷當(dāng)前節(jié)點(diǎn)是否通過 return maze.arrcurpos.rowcurpos.col = 0;Status FootPrint(MazeType &maze,PosType curpos). /留下足跡 maze.arrcurpos.rowcurpos.col=*; return OK;Status MarkPrint(MazeType &maze,PosType curpos). /留下不能通過的標(biāo)記 maze.arrcurpos.rowcurpos.col=; return OK;SElemType CreateSElem(int step, PosType pos, int di). SElemType e; e.step = step; e.seat = pos; e.di = di; return e;PosType NextPos(PosType curpos, DirectiveType di). /返回當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn) PosType pos = curpos; switch(di) . case 1: /東 pos.col+; break; case 2: /南 pos.row+; break; case 3: /西 pos.col-; break; case 4: /北 pos.row-; break; return pos;Status PosEquare(PosType pos1, PosType pos2). /判斷兩節(jié)點(diǎn)是否相等 return pos1.row=pos2.row & pos1.col=pos2.col ;void PrintMaze(MazeType maze,int row,int col). /打印迷宮信息 for(int i=1;i=row;i+). for(int j=1;j=col;j+). switch(maze.arrij) . case 0: printf( ); break; case *: printf(* ); break; case : printf( ); break; case 1: printf(# ); break; printf( ); Status MazePath(MazeType &maze,PosType start, PosType end). /求解迷宮maze中,從入口start到出口end的一條路徑 /若存在,返回TRUE,否則返回FALSE SqStack s;SElemType e; InitStack(s); PosType curpos = start; int curstep = 1; /探索第一部 do. if( Pass(maze,curpos) ). /如果當(dāng)前位置可以通過,即是未曾走到的通道塊 FootPrint(maze,curpos); /留下足跡 e = CreateSElem(curstep,curpos,1); /創(chuàng)建元素 Push(s,e); if( PosEquare(curpos,end) ) return TRUE; curpos =NextPos(curpos,1); /獲得下一節(jié)點(diǎn):當(dāng)前位置的東鄰 curstep+; /探索下一步 else. /當(dāng)前位置不能通過 if(!StackEmpty(s). Pop(s,e); while(e.di=4 & !StackEmpty(s) ). MarkPrint(maze,e.seat); Pop(s,e);curstep-; /留下不能通過的標(biāo)記,并退回一步 if(e.di4). e.di+; Push(s,e); /換一個方向探索 curpos = NextPos(e.seat,e.di); /求下一個節(jié)點(diǎn) while(!StackEmpty(s); return FALSE;/test.cpp#include base.h#include stack.h#include maze.h/*/* 測試 */void main(). int aROWCOL; printf(enter the mazes data: ); for(int i=0;iROW;i+) . for(int j=0; jCOL;j+) . scanf(%d,&aij); PosType
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國硬膠玩具油漆行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年中國前制梭襯數(shù)據(jù)監(jiān)測報(bào)告
- 2025至2030年中國經(jīng)濟(jì)型消泡劑市場分析及競爭策略研究報(bào)告
- 社會治安綜合治理與維穩(wěn)培訓(xùn)課件
- 2025年中國環(huán)行變壓器數(shù)據(jù)監(jiān)測報(bào)告
- 徐州一中學(xué)云龍實(shí)驗(yàn)校2025屆初三英語試題第一次聯(lián)合調(diào)考3月聯(lián)考試題含答案
- 學(xué)習(xí)道德經(jīng)心得體會
- 嬰幼兒早期教育教案
- 好好學(xué)習(xí)天天向上演講稿
- 2025至2031年中國珠光油墨調(diào)墨油行業(yè)投資前景及策略咨詢研究報(bào)告
- 02S515排水檢查井-標(biāo)準(zhǔn)圖集
- (2024年高考真題)2024年普通高等學(xué)校招生全國統(tǒng)一考試數(shù)學(xué)試卷-新課標(biāo)Ⅰ卷(含部分解析)
- 《破產(chǎn)法學(xué)》課程教學(xué)大綱
- 紅領(lǐng)巾小5年規(guī)劃
- 物理2025年中考考前押題密卷(安徽卷)(考試版A4)
- 《黑色模板參考》課件
- 機(jī)器人自主導(dǎo)航與地圖構(gòu)建考核試卷
- 2024年廣西現(xiàn)代物流集團(tuán)校園招聘51人(廣西供應(yīng)鏈服務(wù)集團(tuán)專場)(高頻重點(diǎn)提升專題訓(xùn)練)共500題附帶答案詳解
- 助貸機(jī)構(gòu)及人員從業(yè)禁止
- 《無人機(jī)測繪技能訓(xùn)練模塊》課件-無人機(jī)航測影像獲取外業(yè)
- CJJT135-2009 透水水泥混凝土路面技術(shù)規(guī)程
評論
0/150
提交評論