114122李佳蓉栈与队列实习报告.doc

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
114122李佳蓉栈与队列实习报告

数据结构课程实习报告 姓名:李佳蓉 学号:20121002074 班级:114121-21 学院:信息工程学院 专业:地理信息系统 实习题目 “火烧连营”问题 【问题描述】 “火烧连营”是三国演义中的著名典故之一广为流传,假定文本文件c1.txt 是火烧连营中的军营分布图,每个字符A 代表一个营帐,营帐是可燃物,其他字符代表不可燃的空白地段,文件共有40 行70 列,请你编写程序,读入该文件的内容,再从键盘输入任意点的x 和y值(x70,y40)作为着火点,“火烧连营”后,被燃烧的营帐标上字符’X’,并把整个结果输出到文件c2.txt 中。 【求解思路】 本题类似于老鼠走迷宫问题,首先输入着火点的位置,判断此坐标点是否为着火点。若是着火点,则从此位置开始朝八个方向寻找其相邻点,判断其是否为着火点。如果不是着火点,则输出没有点着,c2.txt文件不变。若是着火点,则将其压入实现建立好的堆栈中,然后重复操作:栈顶点出栈并标记X,同时将符合被燃烧条件的邻居点入栈,直到栈空为止。再将结果输出到c2.txt。 【采用的数据结构】 本题利用栈来实现。定义三个类,一个是用来存放点位置的类,一个是三元表用来实现上下左右左上左下右上右下八个方向的扩展,另外一个存放判断、标记等函数。首先定义一个堆栈,根据输入的点的坐标调用判断函数,判断其是否为着火点。若是着火点,则将其压入实现建立好的堆栈中,然后重复操作:栈顶点出栈并标记X,同时将符合被燃烧条件的邻居点入栈,直到栈空为止。 【程序实现说明】 定义一个ofstream的对象实现文件的读取和结果的输出,将文件中的字符先读取到临时的一位数组中,然后最终转化为二维数组,利用三元组表表示点的上下左右左上左下右上右下八个方向,利用堆栈的压栈出栈和调用判断函数和标记函数实现从着火点向四周扩散。用户需要按照提示输入着火点坐标,若恰好是着火点,则c2.txt中会输出结果,若不是着火点,则提示点火失败。 【程序代码】 // 火烧连营.cpp : 定义控制台应用程序的入口点。 // #include stdafx.h #includeHuoshao.h int _tmain(int argc, _TCHAR* argv[]) { int xx,yy; cout英雄,你要从哪开始烧:endl; cinxxyy; Huoshao n; n.Burn(xx,yy); n.WriteBack(); return 0; //position.h #include StdAfx.h #include position.h position::position(int x,int y)//点坐标 { row=x;//行 col=y;//列 } position::~position(void) { } //Barrack.cpp #include StdAfx.h #include Huoshao.h #includestack Huoshao::Huoshao() {//设置偏移量 pos=new position[8]; pos[0].row=0,pos[0].col=1;//向右方向 pos[1].row=1,pos[1].col=1;//右下方向 pos[2].row=1,pos[2].col=0;//向下方向 pos[3].row=1,pos[3].col=-1;//左下方向 pos[4].row=0,pos[4].col=-1;//向左方向 pos[5].row=-1,pos[5].col=-1;//左上方向 pos[6].row=-1,pos[6].col=0;//向上方向 pos[7].row=-1,pos[7].col=1;//右上方向 fstream myfile; myfile.open (D:\\c1.txt,ios::in);//从文件中读入 world=new char*[41]; for(int i=0;i41;i++) world[i]=new char[71]; Tem=(char*)malloc(2800);// 向系统申请分配2800的内存空间。 int k=0; for(int i=0;i71;i++)//初始化二维数组 world[0][i]=0; for(int j=0;j41;j++) world[j][0]=0; for(int i=0;i40;i++) for(int j=0;j70;j++) myfileTem[k++];//将文本文件中的字符全部读到Tem 一维数组中 k=0;//初始化 for(int i=1;i41;i++) for(int j=1;j71;j++)

您可能关注的文档

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档