Начала очереди будем называть UN а конец UK. Массив очереди обозначим Q
Операции с очередью:
1. Добавление элемента (допустим элемента x)
if UK<=Nmax then begin
Q[UK]:=x;
UK:=UK+1;
end;
2.Удаление элемента
if UN <> UK then begin
l:=Q[UN]
UN:=UN+1;
end;
3.Создать пустую очередь
UN:=1; UK:=1;
Задача №1
Вводится массив n на m элементов. Массив это лист бумаги. В этом массиве ( из этого листа ) вырезали k клеток. На сколько частей распадётся лист?
Итак ниже представлен рисунок задачи. Всего клеток вырезали 8. Т.е. k=8. Клетки которые вырезали помечены на рисунке как -1.

Итак Решение задачи. Делаем дополнительную рамку из -1 для нашего листа. Ниже представлен рисунок.

Итак теперь представим, что лист бумаги, представленный на последнем рисунке, это город. Город в котором все друг друга знают. на ша задача распростаранить сплетню. Ну например как бабушки возле подъезда сидят и сплетничают. Одна бабушка скажет другой что например её сосед начинающий панк-рокер. И вот он долбит и долбит в свою гитару и ей, бедной, не даёт спать. И вот она говорит об этом другой старушки, та следующей. И вот получается целая сеть бабушек которые передают новость своим знакомым. Для чего это всё написал? Потому-что следующий алгоритм который мы сделаем будет как раз основываться на распространении сплетни. Итак мы ищем соседние клетки клеток с -1. И заполняем их сначала 1. Напомню, что соседними будем считать клетки которые находятся от клетки с -1 вверху внизу справа и слева. Делаем это с помощью очереди. Скрин ниже.

Итак соседние клетки -1 обычными 1 мы заполнили. Замечу, что заполнение мы начинали с левого верхнего угла. Дальше делаем ещё 2 очереди и заполняем таблицу 2 и 3. Если всё сделали правильно то получится вот такая таблица

Ну вот с таблицами вроде всё. А теперь собственно сам алгоритм который выполняет нашу задачу.
var a:array [0..101,0..1001] of longint;
Q:array [1..2,1..10000] of longint;
i,j,n,m,UN,UK,i1,j1,SK,k,x1,y1:longint;
Procedure Sosed(x,y:longint);
begin
if a[x,y]=0 then begin
Q[1,UK]:=x; Q[2,UK]:=y;
UK:=UK+1; a[x,y]:=SK;
end;
end;
Begin
readln(n,m);
readln(k);
for i := 1 to k do
begin
readln(i1, j1);
a[i1, j1] := -1;
end;
{for i := 1 to n do
for j := 1 to m do
read(a[i,j]);}
for i:=0 to m + 1 do begin
a[0,i]:=-1;
a[n+1,i]:=-1;
end;
for i:=1 to n do begin
A[i, 0]:=-1;
a[i, m+1]:=-1;
end;
SK:=0;
for i:=1 to n do
for j:=1 to m do
if a[i,j]=0 then begin UN:=1; UK:=1; SK:=SK+1; Q[1,UK]:=i; Q[2,UK]:=j; UK:=UK+1; a[i,j]:=SK;
while UN<>UK do begin
i1:=Q[1,UN];
j1:=Q[2,UN];
UN:=UN+1;
Sosed(i1-1,j1);
Sosed(i1+1,j1);
Sosed(i1,j1-1);
Sosed(i1,j1+1);
end;
end;
for i:=1 to n do begin
for j:=1 to m do write(a[i,j]:3);
writeln;
end;
writeln(sk);
end.
Ну вот и всё.
Другие задачи с очередью вы можете увидеть по ссылкам ниже
1. Кратчайший маршрут
2.Форма и вода