下载此文档

队列的应用BFS.ppt


文档分类:IT计算机 | 页数:约22页 举报非法文档有奖
1/22
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/22 下载此文档
文档列表 文档介绍
保定二中 NOIP2009 ——数据结构 队列的应用
网络中心 刘中一
QQ: 30144166

队列(FIFO)
1 队列的定义
所谓队列,就是允许在一端进行插入,在另一端进行删除的线性表。允许插入的一端称为队尾。规则:先进先出!
初始化一般头:open=0;尾:closed=0;
3
2
6
5
4
1
9
队列头 open
队列尾 closed
当 open>=closed时,队列空
非空:open<closed
队列数组a下标: 0 1 2 3 4 5 6 7……
我们按照如下方式定义队列:
Const
m=队列元素的上限;
Var
q :array[1…m] of integer; {定义队列}
open,closed:integer; {队尾指针和队首指针}
2、队列的基本运算
队列的运算主要有两种:入队(ADD)和出队(DEL)
1、过程ADD(x)—在队列q的尾端插入元素x
procedure ADD( x:qtyper);
begin
{后移队尾指针并插入元素x}
closed:=closed+1;
q[closed]←x;
end;{ADD}
注意:实际操作,可以不使用过程!
2、函数DEL—取出q队列的队首元素
function DEL;
begin
open:=open+1;
del:=q[open];
end;{DEL}
注意:实际操作,可以不使用过程!
例:    一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
输入:整数m,n(m行,n列)
矩阵
输出:细胞的个数。
样例:
输入:
4 10 0234500067 1034560500 2045600671 0000000089
输出:4
0234500067 1034560500 2045600671 89
共4个细胞
算法步骤: 1、从文件中读入m*n矩阵,将其转换为0、1矩阵存入pic数组中; 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;
pic: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 doing(i,j:integer);
var k,open,closed,x,y:integer;
begin
inc(num); pic[i,j]:=0;
open:=0; {队列头} closed:=1; {队列尾}
h[1,1]:=i; h[1,2]:=j;{遇到的第一个细胞入队}
while open<closed do {队不空}
begin
inc(open);
for k:=1 to 4 do {沿细胞的上下左右四个方向搜索细胞}
begin
x:=h[open,1]+dx[k]; y:=h[open,2]+dy[k]; {进入位置(x,y)}

队列的应用BFS 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数22
  • 收藏数0 收藏
  • 顶次数0
  • 上传人JZZQ12
  • 文件大小197 KB
  • 时间2021-05-19