1、从键盘输入迷宫1表示墙0表示通路,并把01存入结构体m1中用flag表示通路初始化通路的标志域。(2)inread();/从文件读出迷宫事先已将迷宫存入文件中,从文件读出迷宫1表示墙0表示通路,并把01存入结构体m1中用flag表示通路初始化通路的标志域。(3)zoumigong();/走迷宫 根据m1判断该坐标四周如果为墙并且标志域为0则可走,将该坐标入栈,将其标志域更改为1,更新坐标,继续判断,知道更新坐标等于出口坐标.栈中存放就是通路的逆序坐标。(4)print1()/以坐标形式输出将栈中坐标出栈,存入数组中以坐标形式输出。(5)print2()/以矩阵形式输出将栈中坐标出栈,存入数组中
2、以矩阵形式输出。四详细设计1功能函数的调用关系图2各功能函数的数据流程图该坐标西边可有通路,该坐标入站,标志域赋1,更新坐标3重点设计及编码 typedef struct int mg200; int top;seqstack;typedef struct migong int m1;/存放墙 int flag;/标志域smaze2020;int empty(seqstack &s)/判栈空 if(s.top=-1) return 0; else return 1;void pop(seqstack &s,int &x1)/出栈 return ; x1=s.mgs.top; s.top-;vo
3、id push(seqstack &s,int y1,int x1)/入栈 if(s.top=20) s.top+; s.mgs.top=y1; s.mgs.top=x1;void zumigong(seqstack &stack,smaze &maze,int &m,int &n)/走迷宫 int i,j,cout; int x1,a,b,y1,x,y,x2,y2; printf(输入入口的横纵坐标,空格隔开n); scanf(%d %d,&x,&y);输入出口的横纵坐标,空格隔开nx2,&y2); for(i=0;i=m+1;i+) for(j=0;j=n+1;j+) if(mazeij.
4、m1=1) printf( else printf(n x1=x; y1=y; if(mazex1y1.m1=1)此路不通: return ; if(mazex2y2.m1=1)入口为墙。请重新输入n else while(x1!=x2|y1!=y2) if(mazex1y1+1.m1=0&mazex1y1+1.flag=0) cout=0; else if(mazex1+1y1.m1=0&mazex1+1y1.flag=0) cout=1; else if(mazex1-1y1.m1=0&mazex1-1y1.flag=0) cout=2; else if(mazex1y1-1.m1=0&m
5、azex1y1-1.flag=0) cout=3; else cout=4; switch(cout) case 0: a=x1; b=y1; mazex1y1.flag=1; y1=y1+1; push(stack,b,a);/列先入 break; case 1: x1=x1+1; case 2: x1=x1-1; case 3: y1=y1-1; case 4: if(empty(stack)!=0) pop(stack,x1); pop(stack,y1); break; printf(此路没有通路: return ; push(stack,y2,x2);五测试数据及运行结果1.正常测试
6、数据和运行结果1测试数据2,运行结果 1.坐标形式 2.矩阵形式3文件保存结果2. 异常测试数据及运行结果六调试情况,设计技巧及体会1改进方案 设置标志域使访问判断坐标更方便。2.体会 通过这段时间的课程设计,本人对计算机的应用,数据结构的作用以及C语言的使用都有了更深的了解。尤其是C语言的进步让我深刻的感受到任何所学的知识都需要实践,没有实践就无法真正理解这些知识以及掌握它们,使其成为自己的财富。在理论学习和上机实践的各个环节中,通过自主学习和请教老师,我收获了不少。当然也遇到不少的问题,也正是因为这些问题引发的思考给我带了收获。从当初不喜欢上机写程序到现在能主动写程序,从当初拿着程序不只如
7、何下手到现在知道如何分析问题,如何用专业知识解决实际问题的转变,我发现无论是专业知识还是动手能力,自己都有很大程度的提高。在这段时间里,我对for、while等的循环函数用法更加熟悉,逐渐形成了较好的编程习惯。在老师的指导帮助下,同学们课余时间的讨论中,这些问题都一一得到了解决。在程序的调试能力上,无形中得到了许多的提高。例如:头文件的使用,变量和数组的范围问题,定义变量时出现的问题等等。在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础。在这次短短的课程实践
8、里,我们得到了李培老师的关心和帮助。她给了我们很多的信息,与我们一起探讨问题,询问我们遇到了哪些问题并耐心给予指导。当我们遇到技术上难以解决的问题时,她就会指导我们解决问题七参考文献数据结构C语言描述耿国华主编,高等教育社出版。#includestdlib.htypedef structvoid inista(seqstack &s) s.top=-1;x1)s,int y1,int x1)void inread(smaze &maze,int m,int n) char name20; int i,j; printf(输入存放迷宫的文件名n scanf(%s,name); FILE *fp=
9、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 mazeij.m1); if(mazeij.m1=0) mazeij.flag=0; else mazeij.flag=1; fclose(fp); for(i=0; mazei0.m1=1; mazei0.flag=1;/加两堵列墙 mazein+1.m1=1; mazein+1.flag=1; for(j=0;j+) /加两堵行墙 maze0j.m1=1; mazem+1j.m1=1; maze0j.flag=1;
10、mazem+1j.flag=1;n)void print1(seqstack stack) int s120,s220,i=0,j=0,n=0; while(stack.top!=-1) n+; pop(stack,s1i); pop(stack,s2i); i+; j+; 以坐标形式输出迷宫路径n迷宫路径为: for(i=n-1;i=1;i-) ,s1i,s2i);%d %d,s10,s20);请输入要保存路径的文件名nwb fprintf(fp,迷宫路径:=0; fprintf(fp, 已成功保存于%s文件中void print2(seqstack & int s120,s220,i=0,
11、j=0,n1,n2; pop(stack,s2j); n1=s1i; n2=s2j; mazen1n2.flag=2;以形象的矩阵形式输出迷宫路径 表示走过的痕迹 表示迷宫路径n如下所示n if(mazeij.m1=0&mazeij.flag=0)mazeij.flag=1)mazeij.flag=2)void savefile(smaze maze,int &n) 输入迷宫:=m;=n; scanf(%d if(mazeij.m1=1)请输入保存的文件名:wt printf( fprintf(fp,mazeij.m1); fputc(n,fp);int print() int i; n 软件1班 付 添 nn 欢迎进入迷宫系统 nn 从键盘输入迷宫 nn 从文件读出迷宫 nn 走迷宫 nn 以坐标形式输出迷宫路径 nn 以形象的矩阵形式表示路径 nn 10退出走迷宫系统 nn 输入你要执行的功能序号 nnni); return i;int main() seqstack stack; inista(stack); int m,n,f; smaze maze; while(f!=10
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2