Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

dln001

.pdf
Скачиваний:
32
Добавлен:
01.03.2016
Размер:
1 Мб
Скачать
☆

4.2. Пересчет маршрутов и путей

Пусть (vi) множество вершин, являющихся концами

дуг, выходящих из vi; à ¡1(vj) множество вершин, являющихся началами дуг, входящих в vj: Тогда пересечение

(vi)\ ¡1(vj) представляет собой множество промежуточных вершин, принадлежащих цепям длиной в две дуги между vi è vj; à j (vi)\ ¡1(vj)j число таких цепей. Поскольку единичные элементы i - строки матрицы смежности соответству-

ют элементам множества (vi) , а единичные элементы

j - столбца этой матрицы элементам множества ¡1(v ); òî j (vi)\ ¡1(vj)j= Pnk=1 aikakj: То же самое следует из анализаj схем на рис. 4.2, где представлены все возможные комбинации

 

vi

aik=0

 

vk

akj=0

 

vj

 

 

 

 

 

 

 

a

vsi

aik=0

 

vsk

akj=1

 

vsj

 

äóãè íåò

 

á

vsi

aik=1

 

vsk akj=0

-

vsj

aikakj=0

äóãà åñòü

â

vsi

 

-

vsk

 

 

vsj

 

-

 

aik=1

akj=1

 

 

 

 

 

 

ã

s

 

-

s

 

-

s

aikakj=1

 

 

 

 

 

Ðèñ 4.2

 

 

 

 

 

существования дуг, образующих цепь длины 2 из vi â vj ñ

промежуточной вершиной vk;

а также значения соответству-

ющих элементов aik è akj матрицы смежности. Если имеют

место случаи а, б или в, цепь отсутствует и соответствующее

существует, а

 

P

aikakj=1

 

слагаемое суммы

kn=1 aikakj равно нулю. В случае г цепь

 

произведение

 

и, следовательно, дает

свой вклад в указанную сумму.

 

Таким образом, задача определения числа цепей (маршру-

тов) длины 2 между всеми парами вершин графа может быть

решена простым возведением в квадрат его матрицы смежно-

сти. Аналогично, количество маршрутов длины 3 может быть

получено из матрицы A3 и вообще количество маршрутов

длины l между вершинами vi è vj равно элементу aij(l)

ìàò-

ðèöû Al: Наконец, количество маршрутов длины не более p

71

Это полностью соответствует значениям элементов

между всеми парами вершин определяется как сумма

A+A2+ : : : +Ap = Xp Al:

l=1

В качестве примера приведем решение задачи пересчета маршрутов графа, изображенного на рис. 4.1 при l=1; 2; 3; 4: Информацию о путях в одну дугу несет матрица смежности A; остальные три матрицы получаем простым умножением:

A =

c

2

a

b

c

d

e

3;

A2 =

c

2

a

b

c

d

e

3;

0

1

0

0

1

1

0

1

1

1

 

a

0 1 0 1 0

 

 

a 0 0 1 1 1

 

 

b

6

0

0

0

1

1

7

 

b

6

1

0

2

0

0

7

 

d

0

0

1

0

0

 

d

0

1

0

0

1

 

 

4

 

 

 

 

 

5

 

 

4

 

 

 

 

 

5

 

e 6

1

0

1

0

0 7

 

e 6

0

2

0 1

1 7

A3 =

c

2

a

b

c

d

e

3;

A4 =

c

2

a

b

c

d

e

3:

1

2 2 1

1

1

3

2

3

4

 

a 1 1 2 0 1

 

 

a 1 3 1 2 3

 

 

b

6

0

3 0 1

2

7

 

b 2 0 3 3 3

7

 

d

1

0 1 1

1

 

d

6

1

2

2

1

1

 

e

6

1

0 2 2

2

7

 

e

6

2

3

4 1

2

7

 

 

4

 

 

 

 

 

5

 

 

4

 

 

 

 

 

5

Непосредственной проверкой по изображению графа убеждаемся, что, например, между вершинами c è e åñòü

1 маршрут (путь) длины 2: (c; b; e) ;

1 маршрут длины 3: (c; e; c; e) ;

4 маршрута (цепи) длины 4: (c; b; e; c; e); (c; b; d; c; e);

(c; e; a; b; e); (c; e; c; b; e) ;

àмежду e è c åñòü

2 маршрута длины 3: (e; c; e; c); (e; a; d; c) (ïóòü);

4 маршрута длины 4: (e; c; b; e; c); (e; a; b; d; c) (ïóòü),

(e; a; b; e; c) (öåïü), (e; c; b; d; c (öåïü).

a(cel) è a(ecl)

(выделены шрифтом и подчеркнуты) матриц A2; A3; A4: К сожалению, определяется число маршрутов, связывающих пару вершин, а не число путей, которые представляют наибольший интерес. Количество путей можно определить, если найти все маршруты и отбросить те из них, где есть повторяющие-

72

ся фрагменты, т. е. необходимо решать задачу перечисления маршрутов. Прежде чем перейти к этой задаче, отметим два факта, касающихся задачи пересчета:

1. Отличные от нуля диагональные элементы матриц указывают на присутствие в графе соответствующего количества циклов длины l: Например, в матрице A3 диагональный эле-

ìåíò a(3)bb =3: Это значит, что в графе есть три цикла длины 3, включающие вершину b: Непосредственно по рис. 4.1 нахо-

äèì: (b; d; c; b) , (b; e; c; b) è (b; e; a; b):

2. Поскольку длина пути в графе не может превышать n¡1; не имеет смысла возводить A в более высокую степень.

4.3. Перечисление маршрутов и путей

Матричный подход, использованный в предыдущих разделах, легко адаптируется к задаче о перечислении маршрутов.

Пусть P(l) матрица всех маршрутов c l промежуточ-

ными вершинами (длины l+1 ), элементы которой определя-

q количество

P

 

 

 

 

 

 

 

 

 

 

 

 

 

 

l+1

þòñÿ êàê p(l)=

 

q

v

k1

v

k2

: : : v

kl

; ãäå v

 

l-я по порядку

 

ij

 

k=1

 

 

 

 

kl ýòî

 

 

 

 

 

промежуточная вершина маршрута, связывающего vi è vj; à

 

 

таких маршрутов. Если маршрутов длины

 

между v

è v

íåò, òî p(l)=0: Слагаемые v

k1

v

k2

: : : v

kl ïðåä-

i

j

 

 

 

 

 

ij

 

 

 

 

 

 

ставляют собой "произведения" вершин, лежащих на некото-

ром маршруте между vi

è vj

: Их можно рассматривать как

размещения без повторений или с повторениями из n элементов по l в зависимости от того, является маршрут путем или

нет. Например, для графа на рис. 4.1 p(3)cd =bea+eab+ecb è, çíà- ÷èò, èç vi â vj есть три маршрута: (c; b; e; a; d) , (c; e; a; b; d) è

(c; e; c; b; d); два из которых являются путями, так как не содержат повторяющихся вершин. В наличии указанных маршрутов легко убедиться непосредственно по графу, а их коли- чество равно значению элемента a(4) A4: Кроме

cd в матрице

P(l);

используем вспомогательную матрицу P0; в которой эле-

ìåíò

pij0

равен vj; если в графе есть дуга (vi; vj); è 0, åñëè

73

все маршруты длины
для любой пары вершин.

дуга отсутствует. Поскольку j - столбец матрицы P(l¡1) îò-

 

 

 

ражает все маршруты длины l; с началом в vk; ãäå k=1; n;

и концом в vj; à i - строка матрицы P0

концы всех дуг

âèäà (vi; vk); ãäå k=1; n;

то сумма

 

n

p0

p(l¡1) отражает

 

 

 

k=1

ik

kj

все маршруты из vi â vj

 

Следовательно, матри-

длины l+1:P

 

 

 

 

 

ца маршрутов P(l) может быть получена как P0£P(l¡1); при этом сомножители в произведениях не переупорядочиваются и не используется степенная запись повторяющихся сомножителей, чтобы не потерять информацию о порядке следования вершин. Таким образом может быть сформирован ряд матриц P(1); P(2); P(3); : : : ; P(q¡1); в совокупности определяющих

· q

В качестве примера выполним расчеты для графа, представленного на рис. 4.1, используя соотношения:

P(1) = P0 £ P(0); P(2) = P0 £ P(1); P(3) = P0 £ P(2);

где в качестве матрицы P(0) (пути без промежуточных вер-

шин) следует взять матрицу смежности графа A: Матрица P0 получается, если в матрице смежности единицы первого

столбца заменить буквой a; âîé b; третьего буквой c

единицы второго столбца бук- и т. д. В результате имеем:

P0 =

c

a

b

c

d

e

3

;

P(0) = A =

c

2

a

b

c

d

e

3

:

2 0

b

0

0

e

0

1

0

0

1

 

a 0 b 0 d 0

 

 

 

a 0 1 0 1 0

 

 

 

b

0

0

0 d e

7

 

 

b

6

0

0

0

1

1

7

 

 

e

6 a

0

c 0

0

 

 

e

1

0

1

0

0

 

 

 

4

0

c 0

 

5

 

 

 

4

0

0

1

0

 

5

 

 

d 6 0

0 7

 

 

d 6

0 7

 

После первого умножения получаем матрицу P(1) :

b

2

a

b

c

d

e

3

 

e

0

d+e

0

0

 

a

6

0

0

d

b

b

7

 

P(1) = P0£P(0) = c

e

0

e

b

b

;

d

6

0

c

0

0

c

7

 

 

6

 

 

 

 

 

7

 

e

6

0

a+c

0

a

c

7

 

6

7

 

 

4

 

 

 

 

 

5

 

74

после второго умножения матрицу P(2) :

b

2

a

b

c

d

e

3

 

0

ea+dc+ec

0

ea

dc+ec

 

a

6

be

dc

bd+be

0

dc

7

 

P(2)=P0£P(1)= c

 

ea+ec

bd+be

ea

ec

:

6 be

7

e

6

 

0

ad+ce ab+cb ab+cb

7

 

6 ce

7

 

d

4

 

0

ce

cb

cb

5

 

6 ce

7

 

Наконец, матрица P(3)=P0£P(2) принимает вид:

 

2

a

b

c

d

e

3

a

 

 

 

 

 

dce

bea+bdc+bec

dce

bea+dcb

dcb+bdc+bec

b

dce+ece

0

ead+dce+ece

eab+dcb+ecb

eab+dcb+ecb

c

6

 

 

 

 

 

 

7:

 

 

 

 

 

+bdc+bec

 

6

 

 

 

 

7

 

6

ece

bea+bdc+bec

ead+ece

bea+eab+ecb

eab+ecb+

7

 

6

7

 

6

 

 

 

 

 

7

d

6

 

 

 

 

 

7

6

cbe

cea+cec

cbd+cbe

cea

cec

7

 

6

 

 

 

 

 

7

e

4

 

 

 

 

 

5

6 abe+cbe

cea+adc+cec

+abe+cbe

cea

adc+cec

7

 

6

 

 

 

 

7

Как видно из примера, уже при небольших значениях l матрицы могут быть весьма громоздкими. Однако, если цель поиска пути, объем вычислений можно существенно уменьшить, отбрасывая произведения с повторяющимися вершинами. Очевидно также, что в этом случае l·(n¡2); òàê êàê ïóòü

в графе не может содержать более чем n¡2 промежуточных вершин 10. Кроме того, с увеличением длины количество путей в общем случае должно сокращаться.

4.4. Задачи о кратчайших путях

Большинство задач этого вида можно рассматривать как расширение, обобщение или модификацию следующей задачи.

В графе G с матрицей весов C=[ci;j] требуется найти путь между заданной парой вершин s è t; у которого сумма

10В случае замкнутого пути (контура) l=n¡1 .

75

простого графа) или
ïàð (äëÿ

весов составляющих его дуг (ребер) минимальна. Здесь s è

t явлются соответственно начальной и конечной вершинами. Такое различие в обозначениях концевых вершин пути необходимо для орграфов, так как в этом случае, в отличие от простых графов, кратчайшие (s; t)- è (t; s)-пути различны.

Понятно, что любой участок кратчайшего пути сам является кратчайшим путем между парой его концевых вершин. Значит, если найден кратчайший (s; t) -путь, промежуточные

вершины которого образуют множество V 0 , то фактически решена задача отыскания кратчайших путей из s âî âñå âåð-

øèíû V 0 . Поэтому представляется естественным следующее обобщение сформулированной выше задачи.

Найти кратчайшие пути между заданной начальной вершиной s и всеми остальными вершинами графа.

Наконец, в самой широкой постановке задача выглядит так:

найти кратчайшие пути между всеми вершинами графа.

Нетрудно видеть, что определяющим в приведенных формулировках является количество пар концевых вершин, для которых следует найти кратчайший путь: в первой2задаче это одна пара, во второй n¡1 пар, а в третьей Cn

2Cn2 (для ориентированного).

Еще одна разновидность задачи возникает, когда для некоторой пары вершин кроме кратчайшего требуется найти еще k¡1 путей, длины которых составляют неубывающую число-

вую последовательность Lêð1 ·Lêð2 · : : : ·Lêðk . Эта задача из- вестна как задача поиска k кратчайших путей между двумя заданными вершинами.

В общем случае элементы матрицы C могут быть разных знаков. Наличие отрицательных значений среди элементов ci;j усложняет решение задачи поиска кратчайших путей. Задача становится еще более сложной, если в графе присутствуют циклы с отрицательным суммарным весом. Наоборот, если выполняется так называемое "правило треугольника": ci;j·ci;k+ck;j; то задача становится существенно проще и фактически может рассматриваться как задача поиска кратчайшего пути в графе с ребрами (дугами) единичной длины.

76

4.4.1. Графы с дугами единичной длины

Рассмотрим случай, когда веса всех дуг (ребер) графа одинаковы. Не нарушая общности, можно считать, что для любой дуги (ребра) ci;j=1: Эффективное решение задачи получается с помощью простой процедуры, в результате которой каждая обработанная вершина получает пометку, равную расстоянию от s: Процесс начинается с того, что все v2 (s) получают

пометку, равную единице. На второй итерации все v2 2(s) помечаются двойкой, затем все v2 3(s) помечаются тройкой, и вообще на i итерации для всех v2 i(s) имеем l(v)=i: Ïðî-

цесс завершается, когда помеченной оказывается вершина t: Описанная процедура расстановки пометок называется поиском в ширину. Рассмотрим реализацию такого вида поиска на примере. Пусть требуется найти кратчайший путь между вершинами v5 è v7 в графе, представленном на рис. 4.3,а.

(1)

 

(0)

 

 

(3)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v1

v2

v3

v4

v5

v6

v7

v8

v9

v10

v11

 

 

v1

 

v5

 

v8

 

 

 

 

 

 

 

 

 

v1

 

 

1

 

 

 

1

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s@@ gs

s

 

 

 

 

 

 

 

 

v2

 

1

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(2)

 

 

@

 

 

 

 

 

 

 

v3

 

 

1

 

 

1

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

1

1

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v2

 

s6

 

(3)@

 

 

 

 

 

 

v4

 

 

 

 

 

 

 

 

 

 

 

 

 

@

 

 

 

 

v5

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(4)

 

 

 

 

 

6

 

@

(2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v6

 

 

 

 

1

 

 

 

 

 

 

1

 

1

 

v3

 

s

 

sAA

 

 

 

 

s6v9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v7

 

 

 

 

 

1

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

(5)

 

v

8

 

 

1

 

 

 

1

 

 

 

 

1

 

 

 

 

 

 

AA

sv10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v9

 

1

 

 

 

 

 

 

1

 

1

 

 

 

 

 

 

 

v10

 

 

 

 

 

1

 

 

 

 

 

1

 

1

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v11

 

 

 

 

 

 

 

 

1

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

vs4

 

vgs7

 

 

vs11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

l(vi)

1

2

4

5

0

3

6

3

2

5

4

 

(5)

 

(6)

 

 

(4)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

à

 

 

 

 

 

 

 

 

 

Ðèñ. 4.3

 

 

 

á

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для расчетов используем матрицу смежности графа, до-

полнив ее строкой

l(vi)

 

для пометок вершин, как показано

на рис. 4.3,б. Сразу пометим вершину v5 нулевым значением. На первой итерации, просматривая пятую строку матрицы, находим единицу в первом столбце. Следовательно, пометка первой вершины l(v1)=1: На второй итерации просмат-

77

v1; v9; v6; v3; v4:

риваем первую строку матрицы. Здесь единицы содержатся во втором, пятом и девятом столбцах. Пятая вершина уже помечена, поэтому помечаем только v2 è v9; записывая во вспомогательной строке двойки в соответствующих столбцах. На третьей итерации анализируем вторую и девятую строки матрицы. В результате пометку 3 получают v8 è v6: Продолжая процесс, в итоге получаем совокупность пометок, как на рис. 4.3,б. Поскольку v7 имеет пометку 6, длина искомого кратчайшего пути равна 6. Остается найти сам путь, т. е. множество составляющих его дуг (ребер), или что тоже самое, последовательность проходимых вершин.

Поиск начинаем с v7: Будем переходить от вершины к вершине, так чтобы пометка каждый раз уменьшалась на единицу, пока не достигнем вершины v5; причем обработку выполняем по столбцы матрицы. В седьмом столбце имеется только одна единица в четвертой строке. Значит, предпоследней вершиной пути является v4 с пометкой 5. В четвертом столбце единицы находятся в третьей, седьмой и десятой строках. Соответствующие вершины имеют пометки l(v3)=4; l(v7)=6; l(v10)=5: Из них подходящей является только v3: Это и есть третья от конца вершина пути. Содержимое третьего столбца указывает на вершины v4 è v6: По значению пометки ( l(v4)=5; l(v6)=3 ) подходит только v6: Действуя аналогич- ным образом, находим еще две промежуточные вершины пути v9 è v1: Окончательно получаем, что кратчайший путь из v5 â v7 проходит через вершины

Алгоритм Ли. В качестве примера применения поиска в ширину рассмотрим задачу трассировки печатных плат, являющихся составной частью любой современной электронной аппаратуры. Печатная плата это тонкая (1,5 2мм) жесткая пластина из электроизоляционного материала, на которой устанавливаются интегральные схемы, транзисторы, диоды, конденсаторы и т. п. Электрическое соединение всех этих элементов осуществляется с помощью проводников, представляющих собой тончайшие узкие металлические полоски, нанесенные по определенной технологии на поверхность платы. Среди прочих оптимизационных задач при проектировании печатных плат важное место занимает задача отыскания

78

варианта размещения проводников, отвечающего ряду требований (отсутствие пересеченеий, ограничение максимальной длины проводников, минимальность их суммарной длины и т. п.), известная как задача трассировки. Многие практиче- ские алгоритмы решения этой задачи в своей основе имеют классический алгоритм Ли, названный так по имени автора и позволяющий найти кратчайший путь между двумя ячейками прямоугольной координатной сетки.

Пусть фрагмент некоторой печатной платы представлен сеткой, изображенной на рис. 4.4. Отдельные ячейки (на рисунке заштрихованы) заняты уже протрассированными проводниками и поэтому не могут использоваться. Необходимо

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

 

 

 

2

3

 

4

5

 

 

 

 

 

 

 

1 s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

s

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

°

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

°

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

3

 

 

 

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

5

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

°

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

°

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

á

 

Ðèñ. 4.4

соединить ячейки s è t кратчайшей ломаной линией, задающей трассу будущего проводника и состоящей из горизонтальных и вертикальных отрезков, проходящих по свободным ячейкам сетки. Вначале все свободные ячейки пусты. Процесс начинается с того, что в свободные ячейки, смежные с s; записываются единицы, как показано на рис. 4.4,а. Далее в пустые ячейки, примыкающие к ячейкам с единицами, пишутся двойки. На третьей итерации оцифрованная область сетки обрамляется тройками, затем четверками и т. д. После пятой итерации получаем разметку как на рис. 4.4,б. Смена разметки от итерации к итерации напоминает распространение волны, с той лишь разницей, что высота волнового фронта по

79

мере удаления от начальной точки s не убывает, а растет11.

Процесс завершается, когда фронт достигает ячейки t: Соответствующая разметка приведена на рис. 4.5,a. Конфигурация

 

 

 

 

 

 

 

 

1

2

3

4

5

6

7

8

2

1

2

3

4

5 6 7

1

2

1

¾2

¾3 4 5 6 7

1

s

 

4

 

 

8

2

1

s?

46

 

 

 

8

 

°

 

 

 

 

 

 

 

°

56¾6

 

 

2

1

 

5

6

10

9

3

2

16

 

10

9

3

2

4

6

7

8 9

10

4

3

26¾6

¾6?6¾76¾8

¾9610

4

3

5

 

10

11

5

4

3

4

5

 

 

10

11

5

 

5

6

7

t

 

6

5

 

5

6

7

 

6

 

 

 

 

 

11

 

 

 

 

 

°

 

 

 

 

 

 

 

 

°t

 

6

 

 

7

8

 

 

7

6

 

 

7

8

 

 

 

7

8

9

8 a

9

10 11

 

8

7

8

9

8 á 9 10 11

 

 

 

 

 

 

 

Ðèñ. 4.5

 

 

 

 

 

 

 

 

самой трассы для проводника выявляется при движении по ячейкам сетки, если, начиная с ячейки t; переходить к соседней с меньшим значением пометки, пока не будет достигнута ячейка s: Эта операция отображена на рис. 4.5,б, из которого

получаем следующие варианты кратчайших путей из s â t :

(3; 5)

°s (1;2) (1;3) (1;4) (2;4) (3;4) (4; 4) (4;5) (4;6) (4;7) (5;7) °t ; °s (3;2) (4;2) (5;2) (5;3) (5;4) (4;4) (4;5) (4;6) (4;7) (5;7) °t ,

где в круглых скобках указаны координаты ячеек в соответ-

ствии с нумерацией строк и столбцов сетки на рис. 4.5,б. Прак-

тически вариант, использующий клетку (3;5), не целесообра-

зен, так как содержит больше углов и, значит, менее надежен.

 

 

 

 

 

 

 

 

 

 

В качестве дополнительной иллюстра-

 

r

rsr

r

r

r

r

r

 

ции к рассмотренному примеру на рис. 4.6

 

r

er

 

r

 

 

 

 

r

 

 

r

r

 

r

 

r

 

r

r

изображен граф, соответствующий печат-

 

 

 

 

 

r

 

r

r

r

r

 

r

 

r

ной плате: каждая свободная клетка пред-

 

r

r

r

r

 

 

t

r

r

 

 

r

 

r

r

 

r

 

er

r

ставлена вершиной, а факт соседства кле-

 

 

 

 

 

 

r

 

 

 

r

 

 

 

r

 

 

r

ток (по горизонтали и вертикали) отобра-

 

r

r

r

r

 

r

r r

r

жен ребром.

 

 

Ðèñ. 4.6

 

 

11Поэтому алгоритм называют также волновым.

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]