用c语言解决迷宫问题设计与寻找通路问题.docx
- 文档编号:11188949
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:10
- 大小:43.28KB
用c语言解决迷宫问题设计与寻找通路问题.docx
《用c语言解决迷宫问题设计与寻找通路问题.docx》由会员分享,可在线阅读,更多相关《用c语言解决迷宫问题设计与寻找通路问题.docx(10页珍藏版)》请在冰豆网上搜索。
用c语言解决迷宫问题设计与寻找通路问题
用c语言解决迷宫设计与寻找通路问题
摘要:
本课程设计主要解决设计一个迷宫以及在给出一组入口和出口的情况下,求出一条通路的问题。
在课程设计中,程序设计语言采用VisualC++6.0,数据结构采用顺序栈存储结构,程序运行平台为Windows98/2000/XP。
对于迷宫设计问题,首先假设了用“0”表示此道路可通,“1”表示不可通,即障碍,然后采用了简单的以时间产生随机变量(0,1变量)和人工输入0-1变量的方法产生迷宫矩阵。
对求解迷宫通路问题,采用“穷举求解”的方法和设计一个“先进后出”的栈来存放当前位置路径,最后得出一条行走迷宫的通路。
在程序设计中,采用了结构化与面向对象两种解决问题的方法。
程序通过调试运行,初步实现了设计目标。
关键词:
程序设计;C++6.0;顺序栈存储结构;穷举求解
Abstract:
Thiscoursedesignmainsolvingdesignamazeandgivenasetofinletandoutlet.Inthecourseofdesign.ProgramminglanguageusedVisualC++6.0.Datastructureandthestoragestructureorderstack.ProgramrunningplatformforWindows98/2000/XP.Foramazedesignproblem.Thatfirstwith"0"saystheroadcanconnect."1"meannotexpert..Isnamelyobstacles.Andthenusingsimpletotimeproducerandomvariables(0,1variables)andartificial0-1variablemethodhasthemazematrix.Solvingtheproblemofmazepathways.The"poorforsolving"themethodanddesigna"advancedaftera"stacktostorethecurrentpositionpath.Finallydrawawalktheaccessofthemaze.Inprogramming.Thestructuralandobject-orientedtwokindsofmethodstosolvetheproblems.Programthroughthedebugoperation.Thenrealizedthedesigngoal.
Keywords:
Programdesign;C++6.0;Storagestructureorderstack;Poorforsolving.
目录
第一章引言…………………………………………………………………………………………………………………………………………….……..3
1.1课程设计目的………………………………………………………………………………………………………………………….….……..….3
1.2课程设计内容………………………………………………………………..……………………………………………….......................3
1.3概要设计………………………………………………………………………………………………………………………..…….…………..…3
第二章程序设计说明…………………………………………………………………………………………………………………….….………….5
2.1定义抽象数据类型……………………………………………………………………………………………………….………………....5
2.2定义栈结构体及二维数组…………………………………………………………………….……………………….…..….…………5
2.3主程序模块……………………………………………………………………………………………….……………………..………………6
第三章详细设计实现…………………………………………….………………………………………………………………..……….…………..7
3.1流程图..…………………………………………………………………………………………………………….……………………....……..7
3.2算法说明……………………………………………………………………………………………………….……………………..…..……….7
3.3主要算法设计…………………………………………………………………………………………….…………………………....……….7
第四章运行环境与结果…………………………………………..………………………………………………..…………………….…..…….10
4.1运行环境…………………………………………………………………………………………………………..……..………………..……10
4.2运行结果与分析……………………………………………………………………………………………………..……………...……….10
第五章结束语……………………………………………………………..………………………………………………………………………..…...12
参考文献……………………………………………………………………………………………………………………….……..………..……….…...13
第一章绪论
本课程设计主要解决设计一个迷宫以及在给出入口和出口的情况下求解一条通路的问题。
利用“穷举求解”的方法来判定当前位置是否可通以及利用栈“先进后出”的特点来存放当前位置可通的信息。
1.1课程设计目的
在我们对一个具体的问题进行分析时,往往要抽象出一个模型,设计一个算法来实现所需要达到的功能。
在此程序中,我们主要是综合运用所学过的知识,回顾VC++编程的同时,熟悉并掌握数据结构中的算法分析与设计。
同时,要掌握类C语言的算法转换成C程序并上机调试的基础;
通过本次课程设计,进一步巩固《C语言》和《数据结构》课程所学的知识,特别是加强数据结构的理解与运用,熟悉面向对象的程序设计方法;通过此次课程设计的实践,锻炼自身程序设计的能力以及用C语言解决实际问题的能力,为以后后续课程的学习以及走上社会打好基础。
1.2课程设计内容
根据对题目的分析和设想,首先,设计一个顺序栈存储结构,其次,定义一个二维数组,用于存放迷宫数据,并在构建迷宫中,要完成对手动建立迷宫的设计,并能输出原始迷宫信息;再次,当程序接受外部输入一组入口、出口数据后,能完成对该迷宫矩阵计算出是否存在通路的情况,若存在通路,则分别用坐标通路和图形通路输出该通路,否则输出无通路的信息;最后,设计完成实现多次输入入口和出口数据后,计算出不同结果的情况,并能分别显示出对应信息。
1.3概要设计
计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。
假如所有可能的通路都探索到则未能到达出口,则所设定的迷宫没有通解[1]。
可以用二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。
为处理方便起见,可以迷宫的四周加一圈障碍。
对于迷宫任一位置,均可约定有东、南、西、北四个方向可通。
第二章程序设计说明
2.1定义抽象数据类型
#include
#include
#include
#defineTRUE 1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus; //函数的返回值
typedefintDirectiveType; //下一个通道方向
#defineRANGE100 //迷宫大小
2.2定义栈结构体及二维数组
(1)定0义堆栈结构
typedefstrucPosType{
introw;
intcol;
}PosType;
typedefstructSElemType{
intstep; //当前位置在路径上的\"序号\"
PosTypeseat; //当前的坐标位置
DirectiveTypedi; //往下一个坐标位置的方向
}SElemType;
typedefstructSqStack{//栈结构的基本定义,指针和栈底指针
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
(2)定义二维数组
typedefstructMazeType{
intm,n;
intarr[RANGE][RANGE];/建立迷宫的的二维数组的长度大小
}MazeType;
2.3主程序模块
main()
{
输入矩阵的大小a,b;
建立矩阵;
for()
{打印原始矩阵以及图形矩阵;
输入入口和出口位置;
判定有无通路;
输出结果;
输入k值,判定下一步的操作;
}
}
第三章详细设计实现
3.1流程图
主要设计思想流程如下图所示:
3.2算法说明
该程序用于解决设计一个迷宫,并在此基础上给出一组入口和出口数据后能判定从该入口位置起是否有通路达到出口位置,有通路则输出坐标通路,否则输出无通路的信息。
本程序分两大模块,迷宫模块和主程序模块,迷宫模块又包括建立迷宫矩阵函数、输出迷宫矩阵原始信息函数、判断通路函数和输出最终信息函数五大函数,主程序模块主要为调用函数和while语句来判定是否重复执行操作[2]。
3.3主要算法设计
(1)结构体的定义
typedefstructnode//堆栈结构
{
introw;//行
intcol;//列
structnode*next;
}Mlink;
(2)迷宫部分程序
StatusInitMaze(MazeType&maze,inta[][COL],introw,intcol){
//按照用户输入的row行和col列的二维数组(0/1)
//设置迷宫maze的初值,包括加上边缘一圈的值
for(inti=1;i<=row;i++){
for(intj=1;j<=col;j++){
maze.arr[i][j]=a[i-1][j-1];//加上围墙
}
}
for(intj=0;j<=col+1;j++){
maze.arr[0][j]=maze.arr[row+1][j]=1;
}
for(i=0;i<=row+1;i++){
maze.arr[i][0]=maze.arr[i][col+1]=1;
}
maze.m=row,maze.n=col;
returnOK;
}
StatusPass(MazeTypemaze,PosTypecurpos){//判断当前节点是否通过
returnmaze.arr[curpos.row][curpos.col]==0;
}
StatusFootPrint(MazeType&maze,PosTypecurpos){//留下足迹
maze.arr[curpos.row][curpos.col]=’*’;
returnOK;
}
StatusMarkPrint(MazeType&maze,PosTypecurpos){//留下不能通过的标记
maze.arr[curpos.row][curpos.col]=’@’;
returnOK;[3]
}
(3)main函数
voidmain()
{
inta[ROW][COL];
printf("enterthemaze'sdata:
\n");
for(inti=0;i { for(intj=0;j { scanf("%d",&a[i][j]);//建立迷宫,并且一次扫描 } } PosTypestart,end; start.row=1;start.col=1;//设定入口坐标 end.row=9;end.col=8;//设定出口坐标 MazeTypemaze; InitMaze(maze,a,ROW,COL);//调用函数 Statusok=MazePath(maze,start,end); if(ok)PrintMaze(maze,ROW,COL);//如果成立,输出迷宫坐标路线 elseprintf("没有找到通路")[4]; } 第四章运行环境与结果 4.1运行环境 MicrosoftVisualC++6.0。 VisualC++(简称VC)是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C++可视化开发环境。 VisualC++6.0提出的控制台应用程序对学习和掌握标准的C/C++内容非常有利。 利用VisualC++6.0进行Internet、数据库及多媒体等多方面的程序开发也很容易[5]。 4.2运行结果与分析 (1)对程序进行编译运行后,窗口弹出如图信息: (2)按照要求输出迷宫图形,1为阻路,0为通路,显示如下信息: (3)回车得到结果,如图所示: 第五章结束语 通过本次课程设计使我意识到自身许多方面的不足以及让我学到了以前没有学过的知识,使我对课程设计有了更深层次的认识和理解,懂得了灵活运用;也让我意识到理论和实践想结合的重要性。 在课程设计中,困难遇到过,也徘徊过,可是最终都被我一一解决了,我想说只要我们肯努力,愿意付出劳动,就能够得到属于我们自己所期望的东西,只要自己认真,敢于拼搏,勇于实践,我们就会有收获。 在此,我由衷的向我的指导老师刘宝娥老师表示忠心的感谢,是她的悉心指导、严格要求和多次为我们细心的解疑和矫正,才使我的课程设计有了较为完善的一面,才使我有了能力的提高,并使我得到了充分的锻炼。 参考文献 [1]严蔚敏吴伟民《数据结构》(C语言版)清华大学出版社,1997 [2]刘振鹏张晓丽郝杰《数据结构》中国铁道出版社2003 [3]太平洋网站 [4]谭浩强《C++面向对象程序设计》北京清华大学2006 [5]谭浩强《C程序设计》北京清华大学2005
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 解决 迷宫 问题 设计 寻找 通路