




免費預覽已結束,剩余1頁可下載查看
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
/base.h/- 公用的常量和類型 -#include#include #include #include /函數(shù)結果狀態(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/- 棧的順序存儲實現(xiàn) -typedef struct. int row; int col;PosType;typedef struct. int step; /當前位置在路徑上的序號 PosType seat; /當前的坐標位置 DirectiveType di; /往下一個坐標位置的方向SElemType;typedef struct. SElemType *base; SElemType *top; int stacksize;SqStack;/- 棧的基本操作的算法實現(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ā),順著某一個方向進行探索,若能走通,則繼續(xù)前進;否則沿著原路退回,換一個方向繼續(xù)探索,直至出口位置,求得一條通路,假如所有可能的通路都探索到而未能達到出口,則所設定的迷宮沒有通路. 說明:可通: 未增走到過的通道快. */#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) /設置迷宮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). /判斷當前節(jié)點是否通過 return maze.arrcurpos.rowcurpos.col = 0;Status FootPrint(MazeType &maze,PosType curpos). /留下足跡 maze.arrcurpos.rowcurpos.col=*; return OK;Status MarkPrint(MazeType &maze,PosType curpos). /留下不能通過的標記 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). /返回當前節(jié)點的下一節(jié)點 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é)點是否相等 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) ). /如果當前位置可以通過,即是未曾走到的通道塊 FootPrint(maze,curpos); /留下足跡 e = CreateSElem(curstep,curpos,1); /創(chuàng)建元素 Push(s,e); if( PosEquare(curpos,end) ) return TRUE; curpos =NextPos(curpos,1); /獲得下一節(jié)點:當前位置的東鄰 curstep+; /探索下一步 else. /當前位置不能通過 if(!StackEmpty(s). Pop(s,e); while(e.di=4 & !StackEmpty(s) ). MarkPrint(maze,e.seat); Pop(s,e);curstep-; /留下不能通過的標記,并退回一步 if(e.di4). e.di+; Push(s,e); /換一個方向探索 curpos = NextPos(e.seat,e.di); /求下一個節(jié)點 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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海南大學《插畫基礎》2023-2024學年第二學期期末試卷
- 波束賦形技術研究-第1篇-洞察及研究
- 柔性電池能量管理策略-洞察及研究
- 醫(yī)院感染管理基本要求
- 貴陽學院《類型電影創(chuàng)作》2023-2024學年第二學期期末試卷
- 湖北大學《競技競賽》2023-2024學年第二學期期末試卷
- 三峽大學《大學體育健美操》2023-2024學年第二學期期末試卷
- 浙江建設職業(yè)技術學院《比較思想政治教育》2023-2024學年第二學期期末試卷
- 執(zhí)業(yè)藥師資格證之《西藥學專業(yè)一》考前沖刺練習試題附參考答案詳解【預熱題】
- 西安思源學院《車輛理論》2023-2024學年第二學期期末試卷
- 食品標準操作規(guī)程
- 青海大學《普通化學》2022-2023學年第一學期期末試卷
- 浙江省杭州市2023-2024學年高一下學期期末教學質(zhì)量檢測政治試題
- 電網(wǎng)工程勞務分包投標方案(技術方案)
- 國開(山東)2024年《小學生心理健康教育》形考1-3終考答案
- 《積極心理學(第3版)》 課件 第10章 感恩
- 人工智能營銷(第2版)課件全套 陽翼 第1-8章 邁入人工智能領域-人工智能營銷的倫理與法律問題
- 人音版四下第5課 陜北綠了百姓笑了
- 2024年重慶市兩江新區(qū)數(shù)學五下期末復習檢測試題含解析
- 大學生心理健康教育智慧樹知到期末考試答案章節(jié)答案2024年湖南中醫(yī)藥大學
- 江蘇省南通市2022-2023學年五年級下學期數(shù)學期末試卷(含答案)2
評論
0/150
提交評論