收藏 分享(赏)

数据结构迷宫问题课程设计.doc

上传人:精品资料 文档编号:9846737 上传时间:2019-09-10 格式:DOC 页数:18 大小:226.66KB
下载 相关 举报
数据结构迷宫问题课程设计.doc_第1页
第1页 / 共18页
数据结构迷宫问题课程设计.doc_第2页
第2页 / 共18页
数据结构迷宫问题课程设计.doc_第3页
第3页 / 共18页
数据结构迷宫问题课程设计.doc_第4页
第4页 / 共18页
数据结构迷宫问题课程设计.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、数据结构课程设计报告设计题目: 迷宫问题数据结构课程设计 _ 班 级: 计科 152 学 号: 19215225 姓 名: 徐昌港 南京农业大学计算机系数据结构课程设计报告内容1课程设计题目迷宫问题以一个 m*n 的长方阵表示迷宫,0 和 1 分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。要求:首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出。其中:(i,j)指示迷宫中的一个坐标,d 表示走到下一坐标的方向。二算法设计思想1.需求分析(1)迷宫数据用一个二维数组in

2、t mazerowcol来存储,在定义了迷宫的行列数后,用两个for循环来录入迷宫数据,并在迷宫周围加墙壁。(2)迷宫的入口位置和出口位置可以由用户自己决定。2.概要设计(1)主程序模块:void main()int mazerowcol;struct mark start,end; /出入口的坐标int dir42=0,1,1,0,0,-1,-1,0;/方向,依次是东西南北built_maze(maze);printf(“请输入入口的横纵坐标:“);scanf(“%d,%d“,printf(“请输入出口的横纵坐标:“);scanf(“%d,%d“,printf(“0为东,1为南,2为西,3为

3、北,-1为出路n“);maze_path(maze,dir,start,end);getchar();(2)栈模块实现栈抽象数据类型(3)迷宫模块实现迷宫抽象数据类型,建立迷宫,找出迷宫的一条通路3.详细设计(1)坐标位置类型struct markint a,b; /迷宫a行b列为位置;(2)迷宫类型void built_maze(int mazerowcol)/按照用户输入的row行和col列的二维数组(元素值为0和1)/设置迷宫maze的初值,包括边上边缘一圈的值void maze_path(int mazerowcol,int dir42,struct mark start,struct

4、 mark end)/求解迷宫maze中,从入口start到出口end的一条路径,/若存在,则返回TRUE;否则返回FALSE(3)栈类型struct elementint i,j,d; /坐标与方向;typedef struct Linkstackelement elem;struct Linkstack *next;*SLinkstack;4.求迷宫路径为伪码算法void maze_path(int mazerowcol,int dir42,struct mark start,struct mark end)int i,j,d;int x,y;element elem,E;SLinksta

5、ck L1,L2;initstack(L1);initstack(L2);mazestart.astart.b=2;elem.i=start.a;elem.j=start.b;elem.d=-1; /d=-1表示无方向push_stack(L1,elem);while(!stack_empty(L1)pop(L1,elem);i=elem.i;j=elem.j;d=elem.d+1; /下一个方向while(d#include#define row 100#define col 100struct markint a,b;struct elementint i,j,d; /坐标与方向;type

6、def struct Linkstackelement elem;struct Linkstack *next;*SLinkstack;int initstack(SLinkstack return 1;int stack_empty(SLinkstack L)if(L=NULL)return 1;elsereturn 0;int push_stack(SLinkstack P=(SLinkstack)malloc(sizeof(Linkstack);P-elem=E;P-next=L;L=P;return 1;int pop(SLinkstack if(!stack_empty(L)E=L-

7、elem;P=L;L=L-next;free(P);return 1;elsereturn 0;void built_maze(int mazerowcol)/建立迷宫int x,y;int m,n;printf(“请输入迷宫的行列数(用逗号隔开):“);scanf(“%d,%d“,printf(“请输入迷宫各行各列的数据(用空格隔开):n“);for(x=0;xm+2;x+)for(y=0;yn+2;y+)if(x=0|x=m+1|y=0|y=n+1)/迷宫周围加墙壁mazexy=1;elsescanf(“%d“,printf(“迷宫生成中n“);printf(“迷宫显示为:n“);for(

8、x=0;xm+2;x+)for(y=0;yn+2;y+)printf(“%3d“,mazexy);printf(“n“);void maze_path(int mazerowcol,int dir42,struct mark start,struct mark end)int i,j,d;int x,y;element elem,E;SLinkstack L1,L2;initstack(L1);initstack(L2);mazestart.astart.b=2; /标记起点坐标elem.i=start.a;elem.j=start.b;elem.d=-1; /d=-1 表示无方向push_s

9、tack(L1,elem);while(!stack_empty(L1)pop(L1,elem);i=elem.i;j=elem.j;d=elem.d+1; /下一个方向while(d4) /探索东西南北各个方向x=i+dird0;y=j+dird1;if(x=end.aelem.j=j;elem.d=d;push_stack(L1,elem);elem.i=x;elem.j=y;elem.d=-1;push_stack(L1,elem);while(L1) /逆置序列,输出迷宫路径pop(L1,E);push_stack(L2,E);while(L2)pop(L2,E);printf(“(%

10、d,%d,%d)n“,E.i,E.j,E.d);return;if(mazexy=0)mazexy=2; /标记走过这个点elem.i=i;elem.j=j;elem.d=d;push_stack(L1,elem);i=x;j=y;d=-1;d+;printf(“此迷宫无出路“);void main()int mazerowcol;struct mark start,end; /出入口的坐标int dir42=0,1,1,0,0,-1,-1,0; /方向,依次是东西南北printf(“*n“);printf(“t* 欢迎使用迷宫模拟程序 *n“);printf(“*n“);built_maze(maze);printf(“请输入入口的横纵坐标:“);scanf(“%d,%d“,printf(“请输入出口的横纵坐标:“);scanf(“%d,%d“,printf(“0 为东,1 为南,2 为西,3 为北,-1 为出路n“);maze_path(maze,dir,start,end);printf(“按任意键继续“);getchar();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报