数据结构迷宫问题求解文档格式.docx

上传人:b****5 文档编号:17266964 上传时间:2022-11-30 格式:DOCX 页数:12 大小:64.67KB
下载 相关 举报
数据结构迷宫问题求解文档格式.docx_第1页
第1页 / 共12页
数据结构迷宫问题求解文档格式.docx_第2页
第2页 / 共12页
数据结构迷宫问题求解文档格式.docx_第3页
第3页 / 共12页
数据结构迷宫问题求解文档格式.docx_第4页
第4页 / 共12页
数据结构迷宫问题求解文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

数据结构迷宫问题求解文档格式.docx

《数据结构迷宫问题求解文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构迷宫问题求解文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

数据结构迷宫问题求解文档格式.docx

2.输入输出的要求:

(i)求得的通路以三元组(i,j,d)的形式输出,其中:

(i,j)指示迷宫中的一个坐标,d表示走到下一个坐标的方向。

(ii)输出迷宫示意图

3.程序所能达到的功能:

(i)实现一个以链表作存储结构的栈类型,以非递归算法求出通路

(ii)以一个递归算法,对任意输入的迷宫矩阵求出所有通路。

2概要设计

1.①构建一个二维数组maze[M][N]用于存储迷宫矩阵

②手动生成迷宫,即为二维数组maze[M][N]赋值

③构建一个栈用于存储迷宫路径

④建立迷宫节点用于存储迷宫中每个节点的访问情况;

非递归

本程序包含6个函数:

(1)主函数main()

(2)生成迷宫create_maze()

(4)打印迷宫print_maze()

(5)搜索迷宫路径并用三元组输出路径mgpath()

(6)用图来输出路径print_tu();

 

递归

本程序包含3个函数:

(1)主函数main();

(2)打印迷宫printmaze();

(3)搜索迷宫路径pass(intx,inty);

3.详细设计

1.非递归

起点和终点的结构类型typedefstruct{

inth;

intl;

}T;

栈节点类型typedefstructcell{

introw;

intcol;

intdir;

}TCell;

1.生成迷宫

voidcreat_maze(inta,intb)

{定义i,j为循环变量

for(i<

a)

for(j<

b)

输入maze[i][j]的值

}

2.打印迷宫

voidprint_maze(intm,intn)

{

用i,j循环变量,将maze[i][j]输出

3.搜索迷宫路径

voidmazepath(intmaze[][],Ts,Te)//参数传递迷宫和起点与终点

TCellS[N1*N2];

top=0;

//建立栈

S[top].row=s.h;

S[top].col=s.l;

S[top].dir=-1;

//起点入栈

while(top>

=0)//判栈是否空

{i,j为当前访问点的位置

if(i,j是终点坐标)

用循环输出栈里的元素;

else将(i,j),即访问点入栈,然后向四周寻找是否有通路,若有通路,将原访问点标记(赋值-1),选一条通路作为新访问点,入栈。

若没有通路,回溯,将栈顶元素出栈作为访问点,继续寻找通路。

4.生成路线图

Print_tu()

i,j为循环变量

for(i<

a)

b)

if(maze[i][j]==1);

print(“#”)//#表示墙

elseif(maze[i][j]==0)

print(“”)

elseprint(“+”)//+表示路径

2.递归

voidprintmaze()

voidpass(intx,inty)

将访问点标记maze[x][y]=-1;

if(x,y是终点坐标)

调用printmaze()输出栈里的元素;

if(x,y的左边是通路)

递归调用pass(x,y-1);

if(x,y的右边是通路)

递归调用pass(x,y+1);

if(x,y的上边是通路)

递归调用pass(x-1,y);

if(x,y的下边是通路)

递归调用pass(x+1,y);

4.测试与分析

【小结或讨论】

这次的项目,加强了我动手、思考和解决问题的能力。

巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力培养了我查阅参考书,查阅手册及文献资料的能力。

培养独立思考,深入研究,分析问题、解决问题的能力。

通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。

附页源程序

#include<

stdio.h>

stdlib.h>

#defineN110

#defineN210

intmaze[N1][N2];

//迷宫数组

typedefstruct{//起点终点坐标

typedefstructcell{

intdir;

//栈的元素结构

//栈

voidcreat_maze(inta,intb)//建立迷宫

inti,j;

for(i=0;

i<

a;

i++)

for(j=0;

j<

b;

j++)

scanf("

%d"

&

maze[i][j]);

voidprint_maze(inta,intb)//打印迷宫

{

for(j=0;

printf("

%d"

maze[i][j]);

\n"

);

}

voidprint_tu(inta,intb)//打印迷宫路径图

{

if(maze[i][j]==1)

printf("

#"

elseif(maze[i][j]==0)

"

else

+"

}

voidmazepath(intmaze[N1][N2],Ts,Te)//搜索路径

inttop=0;

inti,j,k,find,di;

S[top].row=s.h;

maze[s.h][s.l]=-1;

=0)

i=S[top].row;

j=S[top].col;

di=S[top].dir;

if(i==e.h&

&

j==e.l)

输出迷宫路径三元组:

for(k=0;

k<

=top;

k++)

%d%d%d\n"

S[k].row,S[k].col,S[k].dir);

return;

find=0;

while(find==0&

di<

4)

di++;

switch(di)

{

case0:

{i=S[top].row-1;

j=S[top].col;

break;

}

case1:

{i=S[top].row;

j=S[top].col+1;

case2:

{i=S[top].row+1;

case3:

j=S[top].col-1;

}

if(maze[i][j]==0)find=1;

if(find==1)

S[top].dir=di;

top++;

S[top].row=i;

S[top].col=j;

maze[i][j]=-1;

else

maze[S[top].row][S[top].col]=0;

top--;

printf("

没有路径\n"

intmain()//主函数

inta,b;

Ts,e;

输入迷宫的行数与列数:

%d,%d"

a,&

b);

输入迷宫数据:

creat_maze(a,b);

输出迷宫:

print_maze(a,b);

输入起点与终点:

s.h,&

s.l);

e.h,&

e.l);

mazepath(maze,s,e);

输出迷宫图和路线:

print_tu(a,b);

intmaze[9][9]={

1,1,1,1,1,1,1,1,1,

1,0,0,0,0,0,0,0,1,

1,0,1,1,0,1,1,0,1,

1,0,1,0,0,1,0,0,1,

1,0,1,0,1,0,1,0,1,

1,0,0,0,0,0,1,0,1,

1,1,0,1,1,0,1,1,1,

1,1,1,1,1,1,1,1,1

};

9;

elseif(maze[i][j]==-1)

elseprintf("

maze[x][y]=-1;

if(x==7&

y==7)

输出路径\n"

printmaze();

if(maze[x][y+1]==0)

pass(x,y+1);

if(maze[x+1][y]==0)

pass(x+1,y);

if(maze[x-1][y]==0)

pass(x-1,y);

if(maze[x][y-1]==0)

pass(x,y-1);

maze[x][y]=0;

intmain()

intinx=1,iny=1;

迷宫图是:

pass(inx,iny);

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

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1