首页 > 代码库 > 基础算法(二)——队列
基础算法(二)——队列
图1-2
Doute:array[1..100000]of longint;
Begin
2)按最大可能的进队操作次数设置顺序队列的最大元素个数;
3)修改出队算法,使每次出队列后都把队列中剩余数据元素向队头方向移动一个位置;
4)修改入队算法,增加判断条件,当假溢出时,把队列中的数据元素向对头移动,然后方完成入队操作。
0234500067
1034560500
2045600671
0000000089
const
dx:array[1..4]of longint=(0,-1,0,1);
dy:array[1..4]of longint=(1,0,-1,0);
var
n,m,i,j,tj:longint;
a:array[-10..100,-10..100]of boolean;
x:char;
state:array[0..4000,0..4000]of longint;
procedure bfs(x,y:longint);
var
head,tail,i:longint;
begin
inc(tj);
a[x,y]:=false;
head:=0;tail:=1;
state[1,1]:=x;state[1,2]:=y;
repeat
inc(head);
for i:=1 to 4 do
begin
x:=state[head,1]+dx[i];
y:=state[head,2]+dy[i];
if (x>0)and(x<=m)and(y>0)and(y<=n)and(a[x,y]=true) then
begin
inc(tail);
state[tail,1]:=x;
state[tail,2]:=y;
a[x,y]:=false;
end;
end;
until head>=tail;
end;
begin
readln(m,n);
fillchar(a,sizeof(a),true);
for i:=1 to m do
begin
for j:=1 to n do
begin
read(x);
if x=‘0‘ then a[i,j]:=false;
end;
readln;
end;
for i:=1 to m do
for j:=1 to n do
if a[i,j]=true then bfs(i,j);
write(tj);
end.
// (该程序由网上搜集,要用到BFS,找到一个细胞后就进行BFS操作即可)
基础算法(二)——队列