1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
迷宫与栈

课程设计任务书选题一:迷宫与栈问题【问题描述】以一个mXn的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。知识点:栈,递归难度级:★★★★★【任务要求】首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出。其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如,对于下列数据的迷宫,输出一条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),…。编写递归形式的算法,求得迷宫中所有可能的通路。以方阵形式输出迷宫及其通路。【测试数据】迷宫的测试数据如下:左上角(0,1)为入口,右下角(8,9)为出口。课程设计成绩评定表姓名成绩评定权重总分总成绩(五分制)平时成绩20报告成绩50答辩成绩30选题一:迷宫与栈问题摘 要首先设计一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出。其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。设计一个递归形式的算法,求得迷宫中所有可能的通路。设计一个函数以方阵形式输出迷宫及其通路。关键词:迷宫 栈 递归 通路第一章 设计内容设计一个计算迷宫通路的程序,根据输入编号执行相应的操作输出相应的通路,程序具体功能:创建m*n的迷宫,0和1分别表示迷宫中的通路和障碍。非递归程序求解迷宫通路。求得的通路以三元组(i,j,d)的形式输出。其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。递归求迷宫中所有可能的通路。方阵形式输出迷宫及其通路。界面操作设计:1.创建迷宫2.递归求迷宫所有通路3.求迷宫一条通路4.方阵输出迷宫通路0.退出第二章 总体设计2.1模块化设计为实现系统功能,本程序主要分二大模块,分别为:非递归查找迷宫通路(内含:标记可通路方法);递归查找所有可能的通路,这些函数通过主函数调用分别得以实现。主函数提供了程序运行时的友好界面,提供了用户选择的菜单,通过执行多分支选择语句—switch,分别实现函数调用功能。主要函数:Pass(判断是否为通路)FootPrint(标记可通路)NextPos(查找下一通路)Markprint(标记不可通路)MazePath(非递归查找迷宫通路)MazePath_Recursion(递归查找迷宫所有可能通路)PrintMaze(方阵输出迷宫通路)2.2程序流程图第三章 详细设计3.1非递归查找设计编写一个非递归程序求解迷宫通路。求得的通路以三元组(i,j,di)的形式输出。其中:(i,j)指示迷宫中的一个坐标,di表示走到下一坐标的方向。Status MazePath(MazeType maze,PosTypestart,PosType end){SqStack S,S1;PosTypecurpos;intcurstep;SElemType e;InitStack(S);InitStack(S1);curpos=start; //设定当前位置为入口curstep=1; //探索第一步do{if(Pass(maze,curpos)){ //判断当前位置是否可通过FootPrint(maze,curpos); //标记通过路径e.di=1; //下一坐标的方向e.ord=curstep; //当前位置在路径的序号e.seat=curpos; //当前坐标位置Push(S,e); //进栈if(curpos.row==end.row curpos.line==end.line){ //是否到达终点while(StackEmpty(S)){Pop(S,e);Push(S1,e);}printf(迷宫的路径:\n);while(StackEmpty(S1)){Pop(S1,e);printf(第%d步:(%d,%d,%d)\t,e.ord,e.seat,e.di);}return OK;}curpos=NextPos(curpos,1); //下一位置为东curstep++; //探索下一步}else{ //当前位置不能通过if(StackEmpty(S)){Pop(S,e);while(e.di==4StackEmpty(S)){Markp

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档