Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Math-Exel / exel / РГР_1_в2.doc
Скачиваний:
63
Добавлен:
12.02.2016
Размер:
10.27 Mб
Скачать

Задача листоноші для орієнтованого графу

Для орієнтованих графів ми маємо два випадки:

  1. граф G симетричний;

  2. граф G несиметричний.

В першому випадку, якщо G симетричний, то ми отримаємо єдиний розв’язок – Ейлерів контур з якої б вершини ми не почали б.

Другий випадок. Нехай ми маємо орієнтований граф.

d(x) – півстепінь входу;

d+(x) – півстепінь виходу.

d(x)= d+(x) – для симетричного графа;

d+(x) d(x) для несиметричного

d+(x) d(x) графа.

У другому випадку для розв’язання задачі дублюються дуги:

1. якщо вхідних дуг більше, то дублюються вихідні і ця вершина називається джерелом. Кількість дубльованих дуг називається потужністю джерела.

2. якщо вхідних дуг менше, то дублюються вихідні і така вершина називається стоком.

a(i, j) – вага дуги;

f(i, j) – кількість додаткових проходів.

Задача оптимізації:

Після дубляжу граф має стати симетричним. Умова симетричності наступна:

d(x) + f(j, х) = d+(x) + f(х, i)

d(x) - d+(x) = f(х, i) - f(j, х) = D(х)

Якщо D(х)  0 – стік;

D(х) = 0 – проміжна вершина;

D(х)  0 – джерело.

В додатковому графі GG′ вводиться додаткова вершина S, яка є загальним джерелом; і вершина t, яка є загальним стоком. Щоб ці вершини не були ізольованими, вводяться дуги – при цьому джерело S з’єднується дугою (s, i) з усіма іншими джерелами графа.

Для загального стоку t вводяться додаткові дуги (j, t), які з’єднують всі вершини із загальним стоком t.

Пропускна здатність дорівнює D(х).

Рис. 8. Граф G.

Приклад.

для вершини а:

d(a) = 1 = d+(a) = 1. D(a) = 0 - Це проміжна вершина.

для вершини b:

d(b) = 3; d+(b) = 1; D(b) = 2 - Це джерело.

для вершина c:

d-(c) = 1; d+(c) = 2: D(c) = - 1 – це стік.

для вершини d:

d(d) = 1; d+(d) = 2; D(d) = - 1 – це стік.

для вершини e:

d(e) = 2; d+(e) = 2; D(e) = 0 – проміжна вершина

Оскільки граф несиметричний d+(x) d-(x), необхідно визначити, які дуги будуть дублюватися. Для цього будуємо граф G′.

В початковий граф G вводимо дві вершини: вершину S - загальне джерело та вершину t - загальний стік.

Будуємо граф G′.

Рис.9. Граф G′.

Рис.10. Граф G*.

1.S, b, d, t 1 од.

2 одиниці

2. S, b, d, c, t 1 од.

Ми перегнали дві одиниці потоку мінімальними маршрутами з S в t. Дублюємо дуги, по яких переганяли потоки з S в t. Втрати при цьому будуть становити: 2∙5 + 1∙1 = 11 одиниць.

Граф G* без вершин S і t, але з про дубльованими дугами, має бути симетричним.

С: a, b, d, c, b, d, c, b, d, c, e, a.

Рішення задачі комівояжера. Алгоритм литтла Постановка задачі

Комівояжер повинен об'їздити n міст. Для того, щоб скоротити витрати, він хоче побудувати такий маршрут, аби об'їздити всі міста точно по одному разу і повернутися в початковий з мінімумом витрат.

В термінах теорії графів завдання можна сформулювати таким чином. Задано n вершин і матриця {cij}, де cij 0 – довжина (або ціна) дуги (i, j) . Підмаршрутом комівояжера Z розумітимемо цикл i1, i2,…, in, i1 точок 1, 2,…, n. Таким чином, маршрут є набором дуг. Якщо між містами i і j немає переходу, то в матриці ставиться символ «нескінченність». Він обов'язково ставиться по діагоналі, що означає заборону на повернення в точку, через яку вже проходив маршрут комівояжера, довжина маршруту l(z) дорівнює сумі довжин дуг, що входять в маршрут. Хай Z – множина всіх можливих маршрутів. Початкова вершина i1 – фіксована. Потрібно знайти маршрут z0 Z такий, що l(z0)= min l(z), z Z.

Соседние файлы в папке exel