免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
/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; /下一個(gè)通道方向#define RANGE 100 /迷宮大小/2。/stack.h#define STACK_INIT_SIZE 100#define STACKINCREMENT 10/- 棧的順序存儲(chǔ)實(shí)現(xiàn) -typedef struct. int row; int col;PosType;typedef struct. int step; /當(dāng)前位置在路徑上的序號(hào) PosType seat; /當(dāng)前的坐標(biāo)位置 DirectiveType di; /往下一個(gè)坐標(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). /棧滿,追加存儲(chǔ)空間 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/- 迷宮程序 -/*/* 迷宮問(wèn)題算法: 從入口出發(fā),順著某一個(gè)方向進(jìn)行探索,若能走通,則繼續(xù)前進(jìn);否則沿著原路退回,換一個(gè)方向繼續(xù)探索,直至出口位置,求得一條通路,假如所有可能的通路都探索到而未能達(dá)到出口,則所設(shè)定的迷宮沒(méi)有通路. 說(shuō)明:可通: 未增走到過(guò)的通道快. */#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)是否通過(guò) return maze.arrcurpos.rowcurpos.col = 0;Status FootPrint(MazeType &maze,PosType curpos). /留下足跡 maze.arrcurpos.rowcurpos.col=*; return OK;Status MarkPrint(MazeType &maze,PosType curpos). /留下不能通過(guò)的標(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)前位置可以通過(guò),即是未曾走到的通道塊 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)前位置不能通過(guò) if(!StackEmpty(s). Pop(s,e); while(e.di=4 & !StackEmpty(s) ). MarkPrint(maze,e.seat); Pop(s,e);curstep-; /留下不能通過(guò)的標(biāo)記,并退回一步 if(e.di4). e.di+; Push(s,e); /換一個(gè)方向探索 curpos = NextPos(e.seat,e.di); /求下一個(gè)節(jié)點(diǎn) while(!StackEmpty(s); return FALSE;/test.cpp#include base.h#include stack.h#include maze.h/*/* 測(cè)試 */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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年食堂租賃及校園食品安全監(jiān)督服務(wù)合同3篇
- 2024年酒店一次性用品采購(gòu)與售后服務(wù)合同
- 2024年社保工傷賠償合同3篇
- 2024年防盜門定制安裝合同3篇
- 2024年高壓設(shè)備安裝工程標(biāo)準(zhǔn)協(xié)議模板
- 2024年簡(jiǎn)化版戰(zhàn)略協(xié)作框架協(xié)議版B版
- 2024年電力企業(yè)戰(zhàn)略合作協(xié)議3篇
- 2024年社區(qū)垃圾清理工坊
- 2024年金融理財(cái)產(chǎn)品銷售代理合同模板3篇
- 2024蘇州二手房買賣與家居綠化養(yǎng)護(hù)服務(wù)合同3篇
- 2023年供應(yīng)商質(zhì)量年終總結(jié)報(bào)告
- 2024家庭戶用光伏發(fā)電系統(tǒng)運(yùn)行和維護(hù)規(guī)范
- 醫(yī)療機(jī)構(gòu)強(qiáng)制報(bào)告制度
- 江蘇省鎮(zhèn)江市2023-2024學(xué)年高一上學(xué)期期末考試化學(xué)試題(解析版)
- 現(xiàn)場(chǎng)材料員述職報(bào)告
- 特種設(shè)備檢驗(yàn)人員考核培訓(xùn)課件-安全意識(shí)培養(yǎng)與心理健康
- 00和值到27和值的算法書(shū)
- 總務(wù)工作總結(jié)和計(jì)劃
- 護(hù)士條例與法律法規(guī)護(hù)理課件
- 老年人護(hù)理風(fēng)險(xiǎn)管理
- 蒸壓加氣混凝土制品課件
評(píng)論
0/150
提交評(píng)論