- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验
医电11 乐佳倜 2111201015
第一题:
题目:
由0和1构成的n维方阵M表示一个迷宫,其中0表示通路,1表示墙壁。迷宫入口为(1,1),出口为(n,n)。迷宫随机产生。试编一算法求出从入口点到出口点可沿八个方向前进进行自动寻路的递归程序,并显示所找到的路径。
代码:
#includestdio.h
#includestdlib.h
#includemalloc.h
#includeconio.h
#includeiostream.h
#define m 5
#define n 5
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;i8;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;im+2;i++)
for (j=0;jn+2;j++)
{
cinmaze[i][j];
}
for (i=0;im+2;i++)
{
for (j=0;jn+2;j++)
{
coutmaze[i][j] ;
}
coutendl;
}
for (i=0;im+2;i++)
for (j=0;jn+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
代码:
#includestdio.h
#includestdlib.h
#includemalloc.h
#includeiostream.h
typedef double ElemType;
#define m 100
struct stacksq{
ElemType *stack;
int top;
int maxsize;
};
//初始化栈为空
void initstack(struct stacksq* s,int ms)
{
if (ms=0)
{
printf(ms的值非法!\n);
exit(1);
}
s-maxsize=ms;
s-stack=(double*)malloc(ms*sizeof(ElemType));
if (!s-stack)
{
printf(动态存储分配失败!\n);
exit(1);
}
s-top=-1;
}
//再分配空间
void againmalloc(struct stacksq* s)
{
ElemType *p=(double*)realloc(s-stack, 2*s-maxsize*sizeof(ElemType));
if(!p)
{
printf(存储空间用完!\n);
exit(1);
}
s-stack=p;
s-maxsize=2*s-maxsize;
}
//新元素进栈
void push(struct stacksq* s,ElemType x)
{
if (s-top==s-maxsize-1)
againmalloc(s);
s-top++;
您可能关注的文档
- 实用网页代码大全2教材.doc
- (已读)第九篇 在窗体上写字.doc
- 数据结构--表达式求值_副本.doc
- Excel考试题与答案.doc
- 第九章 高一数学教学资料.doc
- 第六章 C#笔试题_经典50题(含答案).doc
- 试题与答案一.doc
- C语言程序设计题目与解答-09.doc
- 第10篇排序练习题答案.doc
- ADC0809资料与C语言驱动程序.docx
- 2022年扬州大学自考英语(二)练习题汇总(附答案解析).pdf
- 2022年高考语文备考之考场中王安石文言文汇编.pdf
- 2022年福建农林大学东方学院自考英语(二)练习题汇总(附答案解析).pdf
- 2022年高考化学一轮复习考点21 原电池 化学电源(全国通用).pdf
- 2022版高考化学一轮复习第一章从实验学化学第一讲化学实验仪器和基本操作学案新人教版.pdf
- 2022年首都医科大学同等学力申硕(临床医学专业)考试题库汇总(含解析).pdf
- 2022年高考化学典型综合题.pdf
- 2023二年级上册语文教案10篇.pdf
- 2023北师大版新教材高中数学选择性必修第一册同步练习--2 . 2 空间向量的运算.pdf
- 2022新教材人教版高中生物必修2同步练习题--第6章 生物的进化达标检测.pdf
文档评论(0)