迷宫问题 有源代码Word格式文档下载.docx

上传人:b****2 文档编号:3729681 上传时间:2023-05-02 格式:DOCX 页数:30 大小:127.92KB
下载 相关 举报
迷宫问题 有源代码Word格式文档下载.docx_第1页
第1页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第2页
第2页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第3页
第3页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第4页
第4页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第5页
第5页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第6页
第6页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第7页
第7页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第8页
第8页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第9页
第9页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第10页
第10页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第11页
第11页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第12页
第12页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第13页
第13页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第14页
第14页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第15页
第15页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第16页
第16页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第17页
第17页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第18页
第18页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第19页
第19页 / 共30页
迷宫问题 有源代码Word格式文档下载.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

迷宫问题 有源代码Word格式文档下载.docx

《迷宫问题 有源代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《迷宫问题 有源代码Word格式文档下载.docx(30页珍藏版)》请在冰点文库上搜索。

迷宫问题 有源代码Word格式文档下载.docx

从键盘输入迷宫1表示墙0表示通路,并把01存入结构体m1中用flag表示通路初始化通路的标志域。

(2)inread();

//从文件读出迷宫

事先已将迷宫存入文件中,从文件读出迷宫1表示墙0表示通路,并把01存入结构体m1中用flag表示通路初始化通路的标志域。

(3)zoumigong();

//走迷宫

根据m1判断该坐标四周如果为墙并且标志域为0则可走,将该坐标入栈,将其标志域更改为1,更新坐标,继续判断,知道更新坐标等于出口坐标.栈中存放就是通路的逆序坐标。

(4)print1()//以坐标形式输出

将栈中坐标出栈,存入数组中以坐标形式输出。

(5)print2()//以矩阵形式输出

将栈中坐标出栈,存入数组中以矩阵形式输出。

四.详细设计

1.

功能函数的调用关系图

2.各功能函数的数据流程图

该坐标西边可有通路,该坐标入站,标志域赋1,更新坐标

3.重点设计及编码

typedefstruct

{

intmg[200];

inttop;

}seqstack;

typedefstructmigong

intm1;

//存放墙

intflag;

//标志域

}smaze[20][20];

intempty(seqstack&

s)//判栈空

if(s.top==-1)

return0;

else

return1;

}

voidpop(seqstack&

s,int&

x1)//出栈

return;

x1=s.mg[s.top];

s.top--;

voidpush(seqstack&

s,inty1,intx1)//入栈

if(s.top==20)

s.top++;

s.mg[s.top]=y1;

s.mg[s.top]=x1;

voidzumigong(seqstack&

stack,smaze&

maze,int&

m,int&

n)//走迷宫

inti,j,cout;

intx1,a,b,y1,x,y,x2,y2;

printf("

输入入口的横纵坐标,空格隔开\n"

);

scanf("

%d%d"

&

x,&

y);

输入出口的横纵坐标,空格隔开\n"

x2,&

y2);

for(i=0;

i<

=m+1;

i++)

{

for(j=0;

j<

=n+1;

j++)

{

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

printf("

■"

else

□"

}

printf("

\n"

}

x1=x;

y1=y;

if(maze[x1][y1].m1==1)

此路不通:

return;

if(maze[x2][y2].m1==1)

入口为墙。

请重新输入\n"

else

while(x1!

=x2||y1!

=y2)

if(maze[x1][y1+1].m1==0&

&

maze[x1][y1+1].flag==0)

cout=0;

else

if(maze[x1+1][y1].m1==0&

maze[x1+1][y1].flag==0)

cout=1;

else

if(maze[x1-1][y1].m1==0&

maze[x1-1][y1].flag==0)

cout=2;

else

if(maze[x1][y1-1].m1==0&

maze[x1][y1-1].flag==0)

cout=3;

else

cout=4;

switch(cout)

{

case0:

a=x1;

b=y1;

maze[x1][y1].flag=1;

y1=y1+1;

push(stack,b,a);

//列先入

break;

case1:

x1=x1+1;

case2:

x1=x1-1;

case3:

y1=y1-1;

case4:

if(empty(stack)!

=0)

{

pop(stack,x1);

pop(stack,y1);

break;

}

{

printf("

此路没有通路:

return;

}

}

push(stack,y2,x2);

五.测试数据及运行结果

1.正常测试数据和运行结果

1.测试数据

2,运行结果

1.坐标形式

2.矩阵形式

3文件保存结果

2.异常测试数据及运行结果

六.调试情况,设计技巧及体会

1.改进方案

设置标志域使访问判断坐标更方便。

2.体会

通过这段时间的课程设计,本人对计算机的应用,数据结构的作用以及C语言的使用都有了更深的了解。

尤其是C语言的进步让我深刻的感受到任何所学的知识都需要实践,没有实践就无法真正理解这些知识以及掌握它们,使其成为自己的财富。

在理论学习和上机实践的各个环节中,通过自主学习和请教老师,我收获了不少。

当然也遇到不少的问题,也正是因为这些问题引发的思考给我带了收获。

从当初不喜欢上机写程序到现在能主动写程序,从当初拿着程序不只如何下手到现在知道如何分析问题,如何用专业知识解决实际问题的转变,我发现无论是专业知识还是动手能力,自己都有很大程度的提高。

在这段时间里,我对for、while等的循环函数用法更加熟悉,逐渐形成了较好的编程习惯。

在老师的指导帮助下,同学们课余时间的讨论中,这些问题都一一得到了解决。

在程序的调试能力上,无形中得到了许多的提高。

例如:

头文件的使用,变量和数组的范围问题,定义变量时出现的问题等等。

在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础。

在这次短短的课程实践里,我们得到了李培老师的关心和帮助。

她给了我们很多的信息,与我们一起探讨问题,询问我们遇到了哪些问题并耐心给予指导。

当我们遇到技术上难以解决的问题时,她就会指导我们解决问题

七.参考文献

《数据结构——C语言描述》耿国华主编,高等教育社出版。

#include<

stdio.h>

stdlib.h>

typedefstruct

voidinista(seqstack&

s)

s.top=-1;

x1)

s,inty1,intx1)

voidinread(smaze&

maze,intm,intn)

charname[20];

inti,j;

printf("

输入存放迷宫的文件名\n"

scanf("

%s"

name);

FILE*fp=fopen(name,"

rt"

if(fp==NULL)

{

\n打开文件%s失败\n"

exit

(1);

}

for(i=1;

m+1;

i++)

for(j=1;

n+1;

fscanf(fp,"

%d"

maze[i][j].m1);

if(maze[i][j].m1==0)

maze[i][j].flag=0;

else

maze[i][j].flag=1;

fclose(fp);

for(i=0;

{

maze[i][0].m1=1;

maze[i][0].flag=1;

//加两堵列墙

maze[i][n+1].m1=1;

maze[i][n+1].flag=1;

for(j=0;

j++)//加两堵行墙

maze[0][j].m1=1;

maze[m+1][j].m1=1;

maze[0][j].flag=1;

maze[m+1][j].flag=1;

n)

voidprint1(seqstackstack)

ints1[20],s2[20],i=0,j=0,n=0;

while(stack.top!

=-1)

n++;

pop(stack,s1[i]);

pop(stack,s2[i]);

i++;

j++;

}

以坐标形式输出迷宫路径\n"

迷宫路径为:

for(i=n-1;

i>

=1;

i--)

<

%d,%d>

→"

s1[i],s2[i]);

%d%d>

s1[0],s2[0]);

请输入要保存路径的文件名\n"

wb"

fprintf(fp,"

迷宫路径:

=0;

fprintf(fp,"

"

已成功保存于%s文件中"

voidprint2(seqstack&

ints1[20],s2[20],i=0,j=0,n1,n2;

pop(stack,s2[j]);

n1=s1[i];

n2=s2[j];

maze[n1][n2].flag=2;

以形象的矩阵形式输出迷宫路径·

表示走过的痕迹⊙表示迷宫路径\n"

如下所示\n"

if(maze[i][j].m1==0&

maze[i][j].flag==0)

maze[i][j].flag==1)

·

"

maze[i][j].flag==2)

⊙"

voidsavefile(smazemaze,int&

n)

输入迷宫:

=m;

=n;

scanf("

%d"

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

请输入保存的文件名:

wt"

printf("

fprintf(fp,"

maze[i][j].m1);

fputc('

\n'

fp);

intprint()

inti;

·

\n"

软件1班·

付·

添·

★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n"

★欢迎进入迷宫系统★\n\n"

★●①从键盘输入迷宫★\n\n"

★●②从文件读出迷宫★\n\n"

★●③走迷宫★\n\n"

★●④以坐标形式输出迷宫路径★\n\n"

★●⑤以形象的矩阵形式表示路径★\n\n"

★●10退出走迷宫系统★\n\n"

★◆输入你要执行的功能序号★\n\n"

★★★★★★★★★★★★★★★★★★★★★★★★★★★\n"

i);

returni;

intmain()

seqstackstack;

inista(stack);

intm,n,f;

smazemaze;

while(f!

=10

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2