pascal_第11讲_队列及应用.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
循环队列 队列的应用 例7-3 细胞个数 【试题描述】 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。 【输入】 整数m,n(第一行)m50,n80; 矩阵(m行,n列)。 【输出】 细胞的个数。 【样例输入】 4 10 0234500067 1034560500 2045600671 0000000089 【样例输出】 4 0234500067 1034560500 2045600671 0000000089 共4个细胞 算法步骤: 1、从文件中读入m*n矩阵,将其转换为0、1矩阵存入pic数组中;1表示细胞,0表示无细胞 2、沿pic数组矩阵从上到下,从左到右,找到遇到的第一个细胞;将细胞的位置入队h,并沿其上、下、左、右四个方向上搜索,如果遇到细胞(pic[I,j]=1)则将其位置入队,入队后的位置pic[I,j]数组置为0; 3、将h队的队头出队,沿其上、下、左、右四个方向上搜索,如果遇到细胞则将其位置入队,入队后的位置pic数组置为0; 4、重复3,直至h队空为止,则此时找出了一个细胞; 5、重复2,直至矩阵找不到细胞; 6、输出找到的细胞数。 参考程序 const dx:array[1..4] of -1..1=(-1,0,1,0); //横坐标:左,下,右,上 dy:array[1..4] of -1..1=(0,1,0,-1); //纵坐标:左,下,右,上 var s:string; a:array[1..50,1..80] of 0..1; //存储矩阵的数组,0:无细胞;1:有细胞 m,n,i,j,num:integer; h:array[1..4000,1..2] of byte; //队列:存细胞的坐标,1:行;2:列 procedure try(p,q:integer); //处理坐标(p,q)的细胞 var i,t,w,x,y:integer; begin inc(num); //细胞数量加1 a[p,q]:=0; t:=1; //队头 w:=1; //队尾 h[1,1]:=p; h[1,2]:=q; //遇到的第一个细胞入队 repeat for i:=1 to 4 do //沿细胞的上下左右四个方向搜索细胞 begin x:=h[t,1]+dx[i]; y:=h[t,2]+dy[i]; if (x0) and (x=m) and (y0) and (y=n) and (a[x,y]=1) then begin inc(w); h[w,1]:=x;h[w,2]:=y; a[x,y]:=0; end; //为细胞的入队 end; inc(t); //队头指针加1,出队 until tw; //直至队空为止 end; begin fillchar(a,sizeof(a),0); //初始化数组 fillchar(h,sizeof(h),0); //初始化队列 num:=0; readln(m,n); for i:=1 to m do //读入矩阵 begin readln(s); for j:=1 to n do if s[j]=0 then a[i,j]:=0 else a[i,j]:=1; end; for i:=1 to m do for j:=1 to n do if a[i,j]=1 then try(i,j); //在矩阵中寻找细胞 writeln(num); //输出细胞个数 end. 广度优先 搜索算法(bfs) 1、适合的题目类型: 1)、求从给定初始状态到目标状态最少需要的步数。 2)、给定初始状态,经过k步后能够到达哪些状态。 2、利用的数据结构:队列。 3、状态的最大值:决定队列的大小(非常重要) 4、队列里需要记住哪些状态:一般使用记录数据类型。 5、状态的转移:不能遗

文档评论(0)

22255990 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档