1 / 9
文档名称:

数据结构实验1.docx

格式:docx   大小:177KB   页数:9页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构实验1.docx

上传人:cxmckate6 2016/12/27 文件大小:177 KB

下载得到文件列表

数据结构实验1.docx

文档介绍

文档介绍:数据结构实验医电 11乐佳倜 2111201015 第一题: 题目: 由0和1 构成的 n 维方阵 M 表示一个迷宫, 其中 0 表示通路,1 表示墙壁。迷宫入口为(1,1), 出口为( n,n) 。迷宫随机产生。试编一算法求出从入口点到出口点可沿八个方向前进进行自动寻路的递归程序,并显示所找到的路径。代码: #include<> #include<> #include<> #include<> #include<> #define m5 #define n5 int maze[m+2][n+2]; int mark[m+2][n+2]; int move[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; int Seekpath(int x,int y) { int i; int g,h; if((x==m)&&(y==n)) return 1; for (i=0;i<8;i++) { g=x+move[i][0]; h=y+move[i][1]; if((maze[g][h]==0)&&(mark[g][h]==0)) { mark[g][h]=1; if(Seekpath(g,h)) { printf("(%d,%d),",g,h); return 1; }}}} void main (void) { int i,j,k; //printf("(%d,%d),",m,n); for (i=0;i<m+2;i++) for (j=0;j<n+2;j++) { cin>>maze[i][j]; } for (i=0;i<m+2;i++) { for (j=0;j<n+2;j++) { cout<<maze[i][j]<<" "; } cout<<endl; } for (i=0;i<m+2;i++) for (j=0;j<n+2;j++) mark[i][j]=0; mark[1][1]=1; if(Seekpath(1,1)) printf("(1,1)\n"); else printf(" 此迷宫没有通路\n"); } 解题方法: 为了确定在当前点周围是否存在可行的路径, 设置一个 8*2 的数组, 对当前点进行尝试, 方向分别为东、西、南、北、东北、西北、东南、西南。进行测试时, 如果格点数据为 0 且未被访问过则进行访问, 则这是一条可行的路径, 依次类推; 确定输入位置和输出位置:对各点实现正确的递归调用;确定程序结束条件。实验心得: 解决这道题要充分利用递归的思想, 当图形数组和方向数组都建立之后, 问题自然迎刃而解。第二题: 题目: 试采用逻辑算式的后缀(逆波兰)表示法来实现对下列算式的计算并输出计算结果: 8+6 ×( 24-3÷(5+6×2 )- 6 )- 12 代码: #include<> #include<> #include<> #include<> typedef double ElemType; #define m 100 struct stacksq{ ElemType *stack; int top