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

Алгоритмизация в инженерных задачах. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
a b c d
a 2 5 0 8
b 0 0 7 9
c 0 0 0 4
d 0 0 3 0
ɉɪɟɞɫɬɚɜɥɟɧɢɟ ɧɟɨɪɢɟɧɬɢɪɨɜɚɧɧɨɝɨ ɝɪɚɮɚ ɜ ɜɢɞɟ ɦɚɬɪɢɰɵ ɫɦɟɠɧɨɫɬɢ:
# include <iostream.h> int main () { int i, j, adj[V][V]; // ɡɞɟɫɶ V – ɤɨɥɢɱɟɫɬɜɨ ɜɟɪɲɢɧ for (i = 0; i<V; i++) for(j = 0;j<V; j++) adj[i][j] = 0; for (i = 0; i<V; i++) adj[i][i] = 1; while (cin >> i >> j) {adj[i][j] = 1; adj[j][i] = 1;} }
ȿɫɥɢ ɪɚɫɫɦɚɬɪɢɜɚɟɦ ɨɪɢɟɧɬɢɪɨɜɚɧɧɵɟ ɝɪɚɮɵ, ɬɨ ɹɱɟɣɤɢ ɦɚɬɪɢɰɵ ɛɭɞɭɬ ɜɵɝɥɹɞɟɬɶ ɫɥɟɞɭɸɳɢɦ ɨɛɪɚɡɨɦ:
 °
]j,i[Graf
® °
¯
ɢ ɦɚɬɪɢɰɚ ɭɠɟ ɧɟ ɛɭɞɟɬ ɫɢɦɦɟɬɪɢɱɧɨɣ.
ȼɟɫ ɜɟɪɲɢɧɵ ɭɤɚɡɵɜɚɟɬɫɹ ɜ ɷɥɟɦɟɧɬɚɯ ɦɚɬɪɢɰɵ ɫɦɟɠɧɨɫɬɢ, ɧɚɯɨɞɹɳɢɯɫɹ ɧɚ ɝɥɚɜɧɨɣ ɞɢɚɝɨɧɚɥɢ, ɬɨɥɶɤɨ ɜ ɬɨɦ ɫɥɭɱɚɟ, ɟɫɥɢ ɜ ɝɪɚɮɟ ɨɬɫɭɬɫɬɜɭɸɬ ɩɟɬɥɢ. ɂɧɚɱɟ, ɜ ɷɬɢɯ ɷɥɟɦɟɧɬɚɯ ɭɤɚɡɵɜɚɟɬɫɹ ɜɟɫ ɩɟɬɥɢ.
Ɇɚɬɪɢɰɚ ɢɧɰɢɞɟɧɬɧɨɫɬɢ – ɷɬɨ ɞɜɭɦɟɪɧɵɣ ɦɚɫɫɢɜ ɪɚɡɦɟɪɨɦ n ɯ m, ɜ ɤɨ­ɬɨɪɨɦ ɭɤɚɡɵɜɚɸɬɫɹ ɫɜɹɡɢ ɦɟɠɞɭ ɢɧɰɢɞɟɧɬɧɵɦɢ ɷɥɟɦɟɧɬɚɦɢ (ɪɟɛɪɨ ɋɬɨɥɛɰɵ ɫɨɨɬɜɟɬɫɬɜɭɸɬ ɪɟɛɪɚɦ, ɫɬɪɨɤɢ – ɜɟɪɲɢɧɚɦ. ɗɬɨɬ ɫɩɨɫɨɛ ɹɜɥɹɟɬɫɹ ɛɨ­ɥɟɟ ɟɦɤɢɦ.
a b c d
==,jiɟɫɥɢ,ɜɟɪɲɢɧɵɜɟɫ
jɜɟɪɲɢɧɟɫɦɟɠɧɚɧɟiɜɟɪɲɢɧɚɟɫɥɢ,0
jɜɟɪɲɢɧɟɫɦɟɠɧɚiɜɟɪɲɢɧɚɟɫɥɢ),ɞɭɝɢ(ɪɟɛɪɚɜɟɫ
ɢ ɜɟɪɲɢɧɚ).
a, a 2 0 0 0
a, b 0 5 0 0
a, d 0 0 0 8
31
b, c 0 0 7 0
b, d 0 0 0 9
c, d 0 0 0 4
d, c 0 0 3 0
ɉɪɢ ɷɬɨɦ
0, ɟɫɥɢ ɜɟɪɲɢɧɚ i ɧɟ ɢɧɰɢɞɟɧɬɧɚ ɪɟɛɪɭ j
Graf[i, j] =
 ®
ɜɟɫ ɪɟɛɪɚ (ɞɭɝɢ ɜ i), ɟɫɥɢ ɜɟɪɲɢɧɚ ɢɧɰɢɞɟɧɬɧɚ ɪɟɛɪɭ j
¯
Ɇɚɬɪɢɰɚ ɢɧɰɢɞɟɧɬɧɨɫɬɢ ɥɭɱɲɟ ɜɫɟɝɨ ɩɨɞɯɨɞɢɬ ɞɥɹ ɩɟɪɟɱɢɫɥɟɧɢɹ ɪɟɛɟɪ, ɢɧɰɢɞɟɧɬɧɵɯ ɜɟɪɲɢɧɟ.
ɇɟɞɨɫɬɚɬɤɢ ɫɩɨɫɨɛɚ:
ɡɚɪɚɧɟɟ ɧɟɨɛɯɨɞɢɦɨ ɡɧɚɬɶ ɯɨɬɹ ɛɵ ɨɪɢɟɧɬɢɪɨɜɨɱɧɨɟ ɱɢɫɥɨ ɜɟɪɲɢɧ ɜ
ɝɪɚɮɟ;
ɞɥɹ ɝɪɚɮɨɜ ɫ ɛɨɥɶɲɢɦ ɱɢɫɥɨɦ ɜɟɪɲɢɧ ɦɚɬɪɢɰɚ ɫɬɚɧɨɜɢɬɫɹ ɫɥɢɲɤɨɦ
ɛɨɥɶɲɨɣ (ɧɚɩɪɢɦɟɪ 1000·1000 = 1 ɦɢɥɥɢɨɧ ɱɢɫɟɥ);
ɩɪɢ ɦɚɥɨɦ ɱɢɫɥɟ ɫɜɹɡɭɸɳɢɯ ɪɟɛɟɪ ɦɚɬɪɢɰɚ ɡɚɩɨɥɧɟɧɚ ɜ ɨɫɧɨɜɧɨɦ ɧɭ-
ɥɹɦɢ.
ɋɩɢɫɤɢ ɫɦɟɠɧɵɯ ɪɟɛɟɪ – ɷɬɨ ɨɞɧɨɦɟɪɧɵɣ ɦɚɫɫɢɜ ɪɚɡɦɟɪɨɦ m, ɫɨɞɟɪ-
ɠɚɳɢɣ ɫɩɢɫɨɤ ɩɚɪ ɜɟɪɲɢɧ, ɢɧɰɢɞɟɧɬɧɵɯ ɫ ɨɞɧɢɦ ɪɟɛɪɨɦ ɝɪɚɮɚ ɜɢɞɚ
a a a b b c d
a b d c d d c
2 5 8 7 9 4 3
typedef struct {
char Node1; //1-ɹ ɜɟɪɲɢɧɚ, ɢɧɰɢɞɟɧɬɧɚɹ ɪɟɛɪɭ
char Node2; //2-ɹ ɜɟɪɲɢɧɚ, ɢɧɰɢɞɟɧɬɧɚɹ ɪɟɛɪɭ
int Weight; // ɜɟɫ ɪɟɛɪɚ
}str;
str Graph[m];
Ƚɪɚɮ ɦɨɠɧɨ ɩɪɟɞɫɬɚɜɢɬɶ ɜ ɜɢɞɟ ɫɩɢɫɨɱɧɨɣ ɫɬɪɭɤɬɭɪɵ, ɫɨɫɬɨɹɳɟɣ ɢɡ ɫɩɢɫɤɨɜ ɞɜɭɯ ɬɢɩɨɜ – ɫɩɢɫɤɚ ɜɟɪɲɢɧ ɢ ɫɩɢɫɤɨɜ ɪɟɛɟɪ.
typedef struct VER{ char *Name; // ɢɦɹ ɜɟɪɲɢɧɵ int Weight; // ɜɟɫ ɜɟɪɲɢɧɵ struct Rebro *branch; // ɜɵɯɨɞɹɳɟɟ ɪɟɛɪɨ
32
struct VER *next; // ɫɥɟɞɭɸɳɚɹ ɜɟɪɲɢɧɚ } VER; //ɜɟɪɲɢɧɚ
typedef struct Rebro{ struct Ver *Node; // ɜɟɪɲɢɧɚ, ɜ ɤɨɬɨɪɭɸ ɜɯɨɞɢɬ int RWeight; // ɜɟɫ ɪɟɛɪɚ struct Rebro *next; // ɫɥɟɞɭɸɳɟɟ ɜɵɯɨɞɹɳɟɟ ɪɟɛɪɨ }Rebro;
Ⱥɥɝɨɪɢɬɦ Ⱦɟɣɤɫɬɪɵ
Ⱥɥɝɨɪɢɬɦ ɝɨɥɥɚɧɞɫɤɨɝɨ ɭɱɟɧɨɝɨ ɗɞɫɝɟɪɚ Ⱦɟɣɤɫɬɪɵ, ɧɚɩɢɫɚɧɧɵɣ ɜ 1959 ɝɨ­ɞɭ, ɧɚɯɨɞɢɬ ɜɫɟ ɤɪɚɬɱɚɣɲɢɟ ɩɭɬɢ ɢɡ ɨɞɧɨɣ ɢɡɧɚɱɚɥɶɧɨ ɡɚɞɚɧɧɨɣ ɜɟɪɲɢɧɵ ɝɪɚɮɚ ɞɨ ɜɫɟɯ ɨɫɬɚɥɶɧɵɯ. ɋ ɟɝɨ ɩɨɦɨɳɶɸ, ɩɪɢ ɧɚɥɢɱɢɢ ɜɫɟɣ ɧɟɨɛɯɨɞɢɦɨɣ ɢɧɮɨɪɦɚɰɢɢ, ɦɨɠɧɨ, ɧɚɩɪɢɦɟɪ, ɭɡɧɚɬɶ ɤɚɤɭɸ ɩɨɫɥɟɞɨɜɚɬɟɥɶɧɨɫɬɶ ɞɨɪɨɝ ɥɭɱɲɟ ɩɪɢɦɟɧɹɬɶ, ɱɬɨɛɵ ɞɨɛɪɚɬɶɫɹ ɢɡ ɨɞɧɨɝɨ ɝɨɪɨɞɚ ɞɨ ɤɚɠɞɨɝɨ ɢɡ ɦɧɨɝɢɯ ɞɪɭɝɢɯ, ɢɥɢ ɜ ɤɚɤɢɟ ɫɬɪɚɧɵ ɜɵɝɨɞɧɟɣ ɷɤɫɩɨɪɬɢɪɨɜɚɬɶ ɧɟɮɬɶ ɢ ɬ. ɞ.
ɇɟɞɨɫɬɚɬɤɨɦ ɷɬɨɝɨ ɚɥɝɨɪɢɬɦɚ ɹɜɥɹɟɬɫɹ ɧɟɜɨɡɦɨɠɧɨɫɬɶ ɨɛɪɚɛɨɬɤɢ ɝɪɚɮɨɜ, ɜ ɤɨɬɨɪɵɯ ɢɦɟɸɬɫɹ ɪɟɛɪɚ ɫ ɨɬɪɢɰɚɬɟɥɶɧɵɦ ɜɟɫɨɦ, ɬ. ɟ. ɟɫɥɢ, ɧɚɩɪɢɦɟɪ, ɧɟɤɨɬɨ­ɪɚɹ ɫɢɫɬɟɦɚ ɩɪɟɞɭɫɦɚɬɪɢɜɚɟɬ ɭɛɵɬɨɱɧɵɟ ɞɥɹ ɮɢɪɦɵ ɦɚɪɲɪɭɬɵ, ɬɨ ɞɥɹ ɪɚɛɨɬɵ ɫ ɧɟɣ ɫɥɟɞɭɟɬ ɜɨɫɩɨɥɶɡɨɜɚɬɶɫɹ ɨɬɥɢɱɧɵɦ ɨɬ ɚɥɝɨɪɢɬɦɚ Ⱦɟɣɤɫɬɪɵ ɦɟɬɨɞɨɦ.
Ⱦɥɹ ɩɪɨɝɪɚɦɦɧɨɣ ɪɟɚɥɢɡɚɰɢɢ ɚɥɝɨɪɢɬɦɚ ɩɨɧɚɞɨɛɢɬɶɫɹ ɱɟɫɤɢɣ ɧɵɣ ɢɦɟɟɬɫɹ ɝɪɚɮ
visited – ɞɥɹ ɯɪɚɧɟɧɢɹ ɢɧɮɨɪɦɚɰɢɢ ɨ ɩɨɫɟɳɟɧɧɵɯ ɜɟɪɲɢɧɚɯ ɢ ɱɢɫɥɟɧ-
distance, ɜ ɤɨɬɨɪɵɣ ɛɭɞɭɬ ɡɚɧɨɫɢɬɶɫɹ ɧɚɣɞɟɧɧɵɟ ɤɪɚɬɱɚɣɲɢɟ ɩɭɬɢ. ɂɬɚɤ,
G = (V, E). Ʉɚɠɞɚɹ ɢɡ ɜɟɪɲɢɧ ɜɯɨɞɹɳɢɯ ɜɨ ɦɧɨɠɟɫɬɜɨ V, ɢɡɧɚ-
ɱɚɥɶɧɨ ɨɬɦɟɱɟɧɚ ɤɚɤ ɧɟ ɩɨɫɟɳɟɧɧɚɹ, ɬ. ɟ. ɷɥɟɦɟɧɬɚɦ ɦɚɫɫɢɜɚ ɡɧɚɱɟɧɢɟ
false.
ɞɜɚ ɦɚɫɫɢɜɚ: ɥɨɝɢ-
visited ɩɪɢɫɜɨɟɧɨ
Ɍɚɤ ɤɚɤ ɫɚɦɵɟ ɜɵɝɨɞɧɵɟ ɩɭɬɢ ɬɨɥɶɤɨ ɩɪɟɞɫɬɨɢɬ ɧɚɣɬɢ, ɜ ɤɚɠɞɵɣ ɷɥɟɦɟɧɬ ɜɟɤɬɨɪɚ
distance ɡɚɩɢɫɵɜɚɟɬɫɹ ɬɚɤɨɟ ɱɢɫɥɨ, ɤɨɬɨɪɨɟ ɡɚɜɟɞɨɦɨ ɛɨɥɶɲɟ ɥɸɛɨɝɨ
ɩɨɬɟɧɰɢɚɥɶɧɨɝɨ ɩɭɬɢ (ɨɛɵɱɧɨ ɷɬɨ ɱɢɫɥɨ ɧɚɡɵɜɚɸɬ ɛɟɫɤɨɧɟɱɧɨɫɬɶɸ, ɧɨ ɜ ɩɪɨ­ɝɪɚɦɦɟ ɩɪɢɦɟɧɹɸɬ, ɧɚɩɪɢɦɟɪ, ɦɚɤɫɢɦɚɥɶɧɨɟ ɡɧɚɱɟɧɢɟ ɤɨɧɤɪɟɬɧɨɝɨ ɬɢɩɚ ɞɚɧ­ɧɵɯ INT_MAX). ȼ ɤɚɱɟɫɬɜɟ ɢɫɯɨɞɧɨɝɨ ɩɭɧɤɬɚ ɜɵɛɢɪɚɟɬɫɹ ɜɟɪɲɢɧɚ ɩɢɫɵɜɚɟɬɫɹ ɧɭɥɟɜɨɣ ɩɭɬɶ:
distance[s] = 0, ɬɚɤ ɤɚɤ ɧɟɬ ɪɟɛɪɚ ɢɡ s ɜ s (ɚɥɝɨɪɢɬɦ ɧɟ
s ɢ ɟɣ ɩɪɢ-
ɩɪɟɞɭɫɦɚɬɪɢɜɚɟɬ ɩɟɬɟɥɶ).
Ⱦɚɥɟɟ ɧɚɯɨɞɹɬɫɹ ɜɫɟ ɫɨɫɟɞɧɢɟ ɜɟɪɲɢɧɵ (ɜ ɤɨɬɨɪɵɟ ɟɫɬɶ ɪɟɛɪɨ ɢɡ ɧɚɩɪɢɦɟɪ ɜɟɪɲɢɧɵ ɫɬɨɢɦɨɫɬɶ ɦɚɪɲɪɭɬɚ ɢɡ
t ɢ u, ɢ ɩɨɨɱɟɪɟɞɧɨ ɢɫɫɥɟɞɭɸɬɫɹ, ɚ ɢɦɟɧɧɨ ɜɵɱɢɫɥɹɟɬɫɹ
s ɩɨɨɱɟɪɟɞɧɨ ɜ ɤɚɠɞɭɸ ɢɡ ɧɢɯ:
s),
− distance[t] = distance[s]+ɜɟɫ ɢɧɰɢɞɟɧɬɧɨɝɨ s ɢ t ɪɟɛɪɚ;
− distance[u] = distance[s]+ ɜɟɫ ɢɧɰɢɞɟɧɬɧɨɝɨ s ɢ u ɪɟɛɪɚ.
Ɉɞɧɚɤɨ ɜɩɨɥɧɟ ɜɟɪɨɹɬɧɨ, ɱɬɨ ɜ ɬɭ ɢɥɢ ɢɧɭɸ ɜɟɪɲɢɧɭ ɢɡ ɫɤɨɥɶɤɨ ɩɭɬɟɣ, ɩɨɷɬɨɦɭ ɰɟɧɭ ɩɭɬɢ ɜ ɬɚɤɭɸ ɜɟɪɲɢɧɭ ɜ ɦɚɫɫɢɜɟ
s ɫɭɳɟɫɬɜɭɟɬ ɧɟ-
distance ɩɪɢɞɟɬ-
ɫɹ ɩɟɪɟɫɦɚɬɪɢɜɚɬɶ, ɬɨɝɞɚ ɧɚɢɛɨɥɶɲɟɟ (ɧɟɨɩɬɢɦɚɥɶɧɨɟ) ɡɧɚɱɟɧɢɟ ɫɬɨɢɦɨɫɬɢ ɦɚɪɲɪɭɬɚ ɢɝɧɨɪɢɪɭɟɬɫɹ, ɚ ɧɚɢɦɟɧɶɲɟɟ ɫɬɚɜɢɬɫɹ ɜ ɫɨɨɬɜɟɬɫɬɜɢɟ ɜɟɪɲɢɧɟ.
ɉɨɫɥɟ ɨɛɪɚɛɨɬɤɢ ɜɟɪɲɢɧ, ɫɦɟɠɧɵɯ ɫ ɜɟɪɲɢɧɨɣ ɫɟɳɟɧɧɚɹ:
visited[s] = true, ɢ ɚɤɬɢɜɧɨɣ ɫɬɚɧɨɜɢɬɫɹ ɬɚ ɜɟɪɲɢɧɚ, ɩɭɬɶ ɢɡ ɜɟɪɲɢɧɵ
s, ɨɧɚ ɩɨɦɟɱɚɟɬɫɹ ɤɚɤ ɩɨ-
s ɜ ɤɨɬɨɪɭɸ ɦɢɧɢɦɚɥɟɧ. Ⱦɨɩɭɫɬɢɦ, ɩɭɬɶ ɢɡ ɜɟɪɲɢɧɵ s ɜ ɜɟɪɲɢɧɭ u ɤɨɪɨɱɟ, ɱɟɦ
33
ɢɡ ɜɟɪɲɢɧɵ ɜɵɲɟ ɨɩɢɫɚɧɧɵɦ ɨɛɪɚɡɨɦ ɢɫɫɥɟɞɭɸɬɫɹ ɟɟ ɫɨɫɟɞɢ, ɡɚ ɢɫɤɥɸɱɟɧɢɟɦ ɜɟɪɲɢɧɵ Ⱦɚɥɟɟ, ɜɟɪɲɢɧɚ ɧɨɜɢɬɫɹ ɜɟɪɲɢɧɚ ɩɪɨɞɨɥɠɚɟɬɫɹ ɞɨ ɬɟɯ ɩɨɪ, ɩɨɤɚ ɜɫɟ ɞɨɫɬɭɩɧɵɟ ɢɡ ɜɟɪɲɢɧɵ
s ɜ ɜɟɪɲɢɧɭ t, ɫɥɟɞɨɜɚɬɟɥɶɧɨ, ɜɟɪɲɢɧɚ u ɫɬɚɧɨɜɢɬɶɫɹ ɚɤɬɢɜɧɨɣ ɢ
s.
u ɩɨɦɟɱɚɟɬɫɹ ɤɚɤ ɩɪɨɣɞɟɧɧɚɹ: visited[u] = true, ɚɤɬɢɜɧɨɣ ɫɬɚ-
t, ɢ ɜɫɹ ɩɪɨɰɟɞɭɪɚ ɩɨɜɬɨɪɹɟɬɫɹ ɞɥɹ ɧɟɟ. Ⱥɥɝɨɪɢɬɦ Ⱦɟɣɤɫɬɪɵ
s ɜɟɪɲɢɧɵ ɧɟ ɛɭɞɭɬ
ɢɫɫɥɟɞɨɜɚɧɵ.
Ɍɟɩɟɪɶ ɧɚ ɤɨɧɤɪɟɬɧɨɦ ɝɪɚɮɟ ɩɪɨɫɥɟɞɢɦ ɪɚɛɨɬɭ ɚɥɝɨɪɢɬɦɚ, ɧɚɣɞɟɦ ɜɫɟ ɤɪɚɬɱɚɣɲɢɟ ɩɭɬɢ ɦɟɠɞɭ ɢɫɬɨɤɨɜɨɣ ɢ ɜɫɟɦɢ ɨɫɬɚɥɶɧɵɦɢ ɜɟɪɲɢɧɚɦɢ. Ɋɚɡɦɟɪ (ɤɨɥɢɱɟɫɬɜɨ ɪɟɛɟɪ) ɢɡɨɛɪɚɠɟɧɧɨɝɨ ɧɢɠɟ ɝɪɚɮɚ ɪɚɜɟɧ ɥɢɱɟɫɬɜɨ ɜɟɪɲɢɧ) –
6 (|V| = 6). ɗɬɨ ɜɡɜɟɲɟɧɧɵɣ ɝɪɚɮ, ɤɚɠɞɨɦɭ ɢɡ ɟɝɨ ɪɟɛɟɪ ɩɨ-
7 (|E| = 7), ɚ ɩɨɪɹɞɨɤ (ɤɨ-
ɫɬɚɜɥɟɧɨ ɜ ɫɨɨɬɜɟɬɫɬɜɢɟ ɧɟɤɨɬɨɪɨɟ ɱɢɫɥɨɜɨɟ ɡɧɚɱɟɧɢɟ, ɩɨɷɬɨɦɭ ɰɟɧɧɨɫɬɶ ɦɚɪɲ­ɪɭɬɚ ɧɟɨɛɹɡɚɬɟɥɶɧɨ ɨɩɪɟɞɟɥɹɟɬɫɹ ɱɢɫɥɨɦ ɪɟɛɟɪ, ɥɟɠɚɳɢɯ ɦɟɠɞɭ ɩɚɪɨɣ ɜɟɪɲɢɧ.
ɂɡ ɜɫɟɯ ɜɟɪɲɢɧ, ɜɯɨɞɹɳɢɯ ɜɨ ɦɧɨɠɟɫɬɜɨ
V, ɜɵɛɟɪɟɦ ɨɞɧɭ, ɨɬ ɤɨɬɨɪɨɣ
ɧɟɨɛɯɨɞɢɦɨ ɧɚɣɬɢ ɤɪɚɬɱɚɣɲɢɟ ɩɭɬɢ ɞɨ ɨɫɬɚɥɶɧɵɯ ɞɨɫɬɭɩɧɵɯ ɜɟɪɲɢɧ. ɉɭɫɬɶ ɬɚɤɨɜɨɣ ɛɭɞɟɬ ɜɟɪɲɢɧɚ ɧɨ ɪɚɜɧɚ ɛɟɫɤɨɧɟɱɧɨɫɬɢ, ɚ ɞɨ ɧɟɟ –
1. Ⱦɥɢɧɚ ɩɭɬɢ ɞɨ ɜɫɟɯ ɜɟɪɲɢɧ, ɤɪɨɦɟ ɩɟɪɜɨɣ, ɢɡɧɚɱɚɥɶ­0, ɬ. ɤ. ɝɪɚɮ ɧɟ ɢɦɟɟɬ ɩɟɬɟɥɶ.
ɍ ɜɟɪɲɢɧɵ 1 ɢɦɟɟɬɫɹ ɬɪɢ ɫɨɫɟɞɧɢɯ ɜɟɪɲɢɧɵ (2, 3, 5), ɢ ɱɬɨɛɵ ɜɵɱɢɫɥɢɬɶ
ɞɥɢɧɭ ɩɭɬɢ ɞɨ ɧɢɯ, ɧɟɨɛɯɨɞɢɦɨ ɫɥɨɠɢɬɶ ɜɟɫ ɞɭɝ, ɥɟɠɚɳɢɯ ɦɟɠɞɭ ɜɟɪɲɢɧɚɦɢ:
1 ɢ 2, 1 ɢ 3, 1 ɢ 5 ɫɨ ɡɧɚɱɟɧɢɟɦ ɩɟɪɜɨɣ ɜɟɪɲɢɧɵ (ɫ ɧɭɥɟɦ):
2ĸ1+0 3ĸ4+0 5ĸ2+0
34
Ʉɚɤ ɨɬɦɟɱɚɥɨɫɶ, ɩɨɥɭɱɢɜɲɢɟɫɹ ɡɧɚɱɟɧɢɹ ɩɪɢɫɜɚɢɜɚɸɬɫɹ ɜɟɪɲɢɧɚɦ, ɥɢɲɶ ɜ ɬɨɦ ɫɥɭɱɚɟ ɟɫɥɢ ɨɧɢ ɦɟɧɶɲɟ ɬɟɯ, ɤɨɬɨɪɵɟ ɡɧɚɱɚɬɫɹ ɧɚ ɧɚɫɬɨɹɳɢɣ ɦɨ­ɦɟɧɬ. Ɉɞɧɚɤɨ ɬɚɤ ɤɚɤ ɤɚɠɞɨɟ ɢɡ ɬɪɟɯ ɱɢɫɟɥ ɦɟɧɶɲɟ ɛɟɫɤɨɧɟɱɧɨɫɬɢ, ɨɧɢ ɫɬɚɧɨ­ɜɹɬɫɹ ɧɨɜɵɦɢ ɜɟɥɢɱɢɧɚɦɢ, ɨɩɪɟɞɟɥɹɸɳɢɦɢ ɞɥɢɧɭ ɩɭɬɢ ɢɡ ɜɟɪɲɢɧɵ 1 ɞɨ ɜɟɪ­ɲɢɧ 2, 3 ɢ 5.
Ⱦɚɥɟɟ, ɚɤɬɢɜɧɚɹ ɜɟɪɲɢɧɚ ɩɨɦɟɱɚɟɬɫɹ ɤɚɤ ɩɨɫɟɳɟɧɧɚɹ, ɫɬɚɬɭɫ «ɚɤɬɢɜɧɨɣ» (ɤɪɚɫɧɵɣ ɤɪɭɝ) ɩɟɪɟɯɨɞɢɬ ɤ ɫɨɫɟɞɧɟɣ ɜɟɪɲɢɧɟ, ɚ ɢɦɟɧɧɨ ɤ ɜɟɪɲɢɧɟ 2, ɬɚɤ ɤɚɤ ɨɧɚ ɛɥɢɠɚɣɲɚɹ ɤ ɪɚɧɟɟ ɚɤɬɢɜɧɨɣ ɜɟɪɲɢɧɟ.
ɍ ɜɟɪɲɢɧɵ 2 ɜɫɟɝɨ ɨɞɧɚ ɧɟ ɪɚɫɫɦɨɬɪɟɧɧɚɹ ɫɨɫɟɞɧɹɹ ɜɟɪɲɢɧɚ (1), ɞɥɢɧɚ ɩɭɬɢ ɦɟɠɞɭ ɧɢɦɢ ɪɚɜɧɚ 9, ɧɨ ɧɚɦ ɧɟɨɛɯɨɞɢɦɨ ɜɵɱɢɫɥɢɬɶ ɞɥɢɧɭ ɩɭɬɢ ɢɡ ɢɫɬɨɤɨ­ɜɨɣ ɜɟɪɲɢɧɵ, ɞɥɹ ɱɟɝɨ ɧɟɨɛɯɨɞɢɦɨ ɫɥɨɠɢɬɶ ɜɟɥɢɱɢɧɭ ɜɟɪɲɢɧɵ 2 ɫ ɜɟɫɨɦ ɞɭɝɢ ɢɡ ɧɟɟ ɜ ɜɟɪɲɢɧɭ 4:
4ĸ1+9
ɍɫɥɨɜɢɟ «ɤɪɚɬɤɨɫɬɢ» (10<) ɜɵɩɨɥɧɹɟɬɫɹ, ɫɥɟɞɨɜɚɬɟɥɶɧɨ, ɜɟɪɲɢɧɚ 4 ɩɨ­ɥɭɱɚɟɬ ɧɨɜɨɟ ɡɧɚɱɟɧɢɟ ɞɥɢɧɵ ɩɭɬɢ.
35
ȼɟɪɲɢɧɚ 2 ɩɟɪɟɫɬɚɟɬ ɛɵɬɶ ɚɤɬɢɜɧɨɣ ɢ ɬɚɤɠɟ ɤɚɤ ɜɟɪɲɢɧɚ 1 ɭɞɚɥɹɟɬɫɹ ɢɡ ɫɩɢɫɤɚ ɧɟɩɨɫɟɳɺɧɧɵɯ. Ɍɟɩɟɪɶ ɬɟɦ ɠɟ ɫɩɨɫɨɛɨɦ ɢɫɫɥɟɞɭɸɬɫɹ ɫɨɫɟɞɧɢɟ ɜɟɪɲɢ­ɧɵ ɞɥɹ 5, ɢ ɜɵɱɢɫɥɹɟɬɫɹ ɞɥɢɧɚ ɩɭɬɢ ɞɨ ɧɢɯ.
ɉɪɢ ɪɚɫɫɦɨɬɪɟɧɢɢ ɫɨɫɟɞɧɢɯ ɜɟɪɲɢɧ ɞɥɹ 3 ɧɟɨɛɯɨɞɢɦɨ ɭɱɟɫɬɶ, ɱɬɨ ɜɟɪ­ɲɢɧɚ 4 ɭɠɟ ɛɵɥɚ ɢɫɫɥɟɞɨɜɚɧɚ ɢ ɪɚɫɫɬɨɹɧɢɟ ɨɞɧɨɝɨ ɢɡ ɜɨɡɦɨɠɧɵɯ ɩɭɬɟɣ ɢɡ ɢɫ­ɬɨɤɚ ɞɨ ɧɟɟ ɜɵɱɢɫɥɟɧɨ. ȿɫɥɢ ɞɜɢɝɚɬɶɫɹ ɜ ɧɟɟ ɱɟɪɟɡ ɜɟɪɲɢɧɭ 3, ɬɨ ɩɭɬɶ ɫɨɫɬɚɜɢɬ 4+7 = 11, ɚ 11>10, ɩɨɷɬɨɦɭ ɧɨɜɨɟ ɡɧɚɱɟɧɢɟ ɢɝɧɨɪɢɪɭɟɬɫɹ, ɫɬɚɪɨɟ ɨɫɬɚɟɬɫɹ.
Ⱥɧɚɥɨɝɢɱɧɚɹ ɫɢɬɭɚɰɢɹ ɫ ɜɟɪɲɢɧɨɣ 6. Ɂɧɚɱɟɧɢɟ ɫɚɦɨɝɨ ɛɥɢɡɤɨɝɨ ɩɭɬɢ ɞɨ ɧɟɟ ɢɡ ɜɟɪɲɢɧɵ 1 ɪɚɜɧɨ 10, ɚ ɨɧɨ ɩɨɥɭɱɚɟɬɫɹ ɬɨɥɶɤɨ ɜ ɬɨɦ ɫɥɭɱɚɟ, ɟɫɥɢ ɢɞɬɢ ɱɟ­ɪɟɡ ɜɟɪɲɢɧɭ 5.
36
Ʉɨɝɞɚ ɜɫɟ ɜɟɪɲɢɧɵ ɝɪɚɮɚ ɢɥɢ ɬɟ, ɱɬɨ ɞɨɫɬɭɩɧɵ ɢɡ ɢɫɬɨɤɚ, ɛɭɞɭɬ ɩɨɦɟɱɟ­ɧɵ ɤɚɤ ɩɨɫɟɳɟɧɧɵɟ, ɬɨɝɞɚ ɪɚɛɨɬɚ ɚɥɝɨɪɢɬɦɚ Ⱦɟɣɤɫɬɪɵ ɡɚɜɟɪɲɢɬɫɹ, ɢ ɜɫɟ ɧɚɣɞɟɧɧɵɟ ɩɭɬɢ ɛɭɞɭɬ ɤɪɚɬɱɚɣɲɢɦɢ. Ɍɚɤ ɛɭɞɟɬ ɜɵɝɥɹɞɟɬɶ ɫɩɢɫɨɤ ɫɚɦɵɯ ɨɩɬɢ­ɦɚɥɶɧɵɯ ɞɥɢɧ ɩɭɬɢ, ɥɟɠɚɳɢɯ ɦɟɠɞɭ ɜɟɪɲɢɧɨɣ 1 ɢ ɜɫɟɦɢ ɨɫɬɚɥɶɧɵɦɢ ɜɟɪɲɢ­ɧɚɦɢ, ɪɚɫɫɦɚɬɪɢɜɚɟɦɨɝɨ ɝɪɚɮɚ:
1ĺ1 = 0
1ĺ2 = 1
1ĺ3 = 4
ĺ4 = 10
1
1ĺ5 = 2
1ĺ6 = 10
ȼ ɩɪɨɝɪɚɦɦɟ, ɧɚɯɨɞɹɳɟɣ ɛɥɢɠɚɣɲɢɟ ɩɭɬɢ ɦɟɠɞɭ ɜɟɪɲɢɧɚɦɢ ɩɨɫɪɟɞ­ɫɬɜɨɦ ɦɟɬɨɞɚ Ⱦɟɣɤɫɬɪɵ, ɝɪɚɮ ɛɭɞɟɬ ɩɪɟɞɫɬɚɜɥɟɧ ɜ ɜɢɞɟ ɦɚɬɪɢɰɵ ɫɦɟɠɧɨɫɬɢ. ȼɦɟɫɬɨ ɟɞɢɧɢɰ ɜ ɧɟɣ ɛɭɞɭɬ ɜɵɫɬɚɜɥɟɧɵ ɜɟɫɚ ɪɟɛɟɪ, ɮɭɧɤɰɢɹ ɧɭɥɟɣ ɨɫɬɚɧɟɬɫɹ ɩɪɟɠɧɟɣ: ɩɨɤɚɡɵɜɚɬɶ, ɦɟɠɞɭ ɤɚɤɢɦɢ ɜɟɪɲɢɧɚɦɢ ɧɟɬ ɪɟɛɟɪ ɢɥɢ ɠɟ ɨɧɢ ɟɫɬɶ, ɧɨ ɨɬɪɢɰɚɬɟɥɶɧɨ ɧɚɩɪɚɜɥɟɧɧɵ.
ɉɪɢɦɟɪ ɪɟɚɥɢɡɚɰɢɢ ɚɥɝɨɪɢɬɦɚ ɷɬɨɣ
ɩɪɨɝɪɚɦɦɵ [1]:
#include <vcl.h>
#pragma hdrstop
#include <iostream>
using namespace std;
const int V = 6;
//ɚɥɝɨɪɢɬɦ Ⱦɟɣɤɫɬɪɵ
void Dijkstra(int GR[V][V], int start)
{
int distance[V], count, index, i, u, m = start+1;
bool visited[V];
for (i = 0; i<V; i++)
{
distance[i] = INT_MAX; visited[i] = false;
}
distance[start] = 0;
37
for (count = 0; count<V-1; count++)
{
int min = INT_MAX;
for (i = 0; i<V; i++)
if (!visited[i] && distance[i]< = min)
{
min = distance[i]; index = i;
}
u = index;
visited[u] = true;
for (i = 0; i<V; i++)
if (!visited[i] && GR[u][i] && distance[u]! = INT_MAX &&
distance[u]+GR[u][i]<distance[i])
distance[i] = distance[u]+GR[u][i];
}
cout<<"Stoimost puti iz nach vers do ostaln:\t\n";
for (i = 0; i<V; i++) if (distance[i]! = INT_MAX)
cout<<m<<" > "<<i+1<<" = "<<distance[i]<<endl;
else cout<<m<<" > "<<i+1<<" = "<<"marshrut nedost"<<endl;
}
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "Rus");
int start, GR[V][V] = {
{0, 1, 4, 0, 2, 0},
{0, 0, 0, 9, 0, 0},
{4, 0, 0, 7, 0, 0},
{0, 9, 7, 0, 0, 2},
{0, 0, 0, 0, 0, 8},
{0, 0, 0, 0, 0, 0}};
cout<<"Nach versh >> "; cin>>start;
Dijkstra(GR, start-1);
system("pause>>void");
}
Ⱥɥɝɨɪɢɬɦ Ɏɥɨɣɞɚ-ɍɨɪɲɟɥɥɚ
Ⱥɥɝɨɪɢɬɦ ɩɨɥɭɱɢɥ ɜ ɱɟɫɬɶ ɞɜɭɯ ɚɦɟɪɢɤɚɧɫɤɢɯ ɢɫɫɥɟɞɨɜɚɬɟɥɟɣ Ɋɨɛɟɪɬɚ Ɏɥɨɣɞɚ ɢ ɋɬɢɜɟɧɚ ɍɨɪɲɟɥɥɚ, ɨɞɧɨɜɪɟɦɟɧɧɨ ɨɬɤɪɵɜɲɢɯ ɟɝɨ ɜ 1962 ɝɨɞɭ. Ɋɟɠɟ ɜɫɬɪɟɱɚɸɬɫɹ ɞɪɭɝɢɟ ɜɚɪɢɚɧɬɵ ɧɚɢɦɟɧɨɜɚɧɢɣ: ɚɥɝɨɪɢɬɦ Ɋɨɣ-ɍɨɪɲɟɥɥɚ ɢɥɢ ɚɥ­ɝɨɪɢɬɦ Ɋɨɣ-Ɏɥɨɣɞɚ. Ɋɨɣ – ɮɚɦɢɥɢɹ ɩɪɨɮɟɫɫɨɪɚ, ɤɨɬɨɪɵɣ ɪɚɡɪɚɛɨɬɚɥ ɚɧɚɥɨɝɢɱ­ɧɵɣ ɚɥɝɨɪɢɬɦ ɧɚ 3 ɝɨɞɚ ɪɚɧɶɲɟ ɤɨɥɥɟɝ (ɜ 1959 ɝ.), ɧɨ ɷɬɨ ɟɝɨ ɨɬɤɪɵɬɢɟ ɨɫɬɚɥɨɫɶ ɛɟɡɜɟɫɬɧɵɦ.
38
Ⱥɥɝɨɪɢɬɦ Ɏɥɨɣɞɚ-ɍɨɪɲɟɥɥɚ – ɷɬɨ ɞɢɧɚɦɢɱɟɫɤɢɣ ɚɥɝɨɪɢɬɦ ɜɵɱɢɫɥɟɧɢɹ ɡɧɚɱɟɧɢɣ ɤɪɚɬɱɚɣɲɢɯ ɩɭɬɟɣ ɞɥɹ ɤɚɠɞɨɣ ɢɡ ɜɟɪɲɢɧ ɝɪɚɮɚ. Ⱥɥɝɨɪɢɬɦ ɪɚɛɨɬɚɟɬ ɧɚ ɜɡɜɟɲɟɧɧɵɯ ɝɪɚɮɚɯ ɫ ɩɨɥɨɠɢɬɟɥɶɧɵɦɢ ɢ ɨɬɪɢɰɚɬɟɥɶɧɵɦɢ ɜɟɫɚɦɢ ɪɟɛɟɪ, ɧɨ ɛɟɡ ɨɬɪɢɰɚɬɟɥɶɧɵɯ ɰɢɤɥɨɜ, ɹɜɥɹɹɫɶ, ɬɚɤɢɦ ɨɛɪɚɡɨɦ, ɛɨɥɟɟ ɨɛɳɢɦ ɜ ɫɪɚɜɧɟɧɢɢ ɫ ɚɥɝɨɪɢɬɦɨɦ Ⱦɟɣɤɫɬɪɵ, ɬɚɤ ɤɚɤ ɩɨɫɥɟɞɧɢɣ ɧɟ ɪɚɛɨɬɚɟɬ ɫ ɨɬɪɢɰɚɬɟɥɶɧɵɦɢ ɜɟɫɚɦɢ ɪɟɛɟɪ, ɢ
ɤ ɬɨɦɭ ɠɟ ɤɥɚɫɫɢɱɟɫɤɚɹ ɟɝɨ ɪɟɚɥɢɡɚɰɢɹ ɩɨɞɪɚɡɭɦɟɜɚɟɬ ɨɩɪɟɞɟɥɟɧɢɟ ɨɩ-
ɬɢɦɚɥɶɧɵɯ ɪɚɫɫɬɨɹɧɢɣ ɨɬ ɨɞɧɨɣ ɜɟɪɲɢɧɵ ɞɨ ɜɫɟɯ ɨɫɬɚɥɶɧɵɯ.
Ⱦɥɹ ɪɟɚɥɢɡɚɰɢɢ ɚɥɝɨɪɢɬɦɚ Ɏɥɨɣɞɚ-ɍɨɪɲɟɥɥɚ ɫɮɨɪɦɢɪɭɟɦ ɦɚɬɪɢɰɭ ɫɦɟɠ-
D[][]ɝɪɚɮɚ G = (V, E), ɜ ɤɨɬɨɪɨɦ ɤɚɠɞɚɹ ɜɟɪɲɢɧɚ ɩɪɨɧɭɦɟɪɨɜɚɧɚ
ɧɨɫɬɢ ɨɬ
1 ɞɨ |V|. ɗɬɚ ɦɚɬɪɢɰɚ ɢɦɟɟɬ ɪɚɡɦɟɪ |V|ɯ|V|, ɢ ɤɚɠɞɨɦɭ ɟɟ ɷɥɟɦɟɧɬɭ D[i][j] ɩɪɢ-
ɫɜɨɟɧ ɜɟɫ ɪɟɛɪɚ, ɢɞɭɳɟɝɨ ɢɡ ɜɟɪɲɢɧɵ
i ɜ ɜɟɪɲɢɧɭ j. ɉɨ ɦɟɪɟ ɜɵɩɨɥɧɟɧɢɹ ɚɥɝɨ-
ɪɢɬɦɚ, ɷɬɚ ɦɚɬɪɢɰɚ ɛɭɞɟɬ ɩɟɪɟɡɚɩɢɫɵɜɚɬɶɫɹ: ɜ ɤɚɠɞɭɸ ɢɡ ɟɟ ɹɱɟɟɤ ɜɧɟɫɟɬɫɹ ɡɧɚ­ɱɟɧɢɟ, ɨɩɪɟɞɟɥɹɸɳɟɟ ɨɩɬɢɦɚɥɶɧɭɸ ɞɥɢɧɭ ɩɭɬɢ ɢɡ ɜɟɪɲɢɧɵ
i ɜ ɜɟɪɲɢɧɭ j (ɨɬɤɚɡ
ɨɬ ɜɵɞɟɥɟɧɢɹ ɫɩɟɰɢɚɥɶɧɨɝɨ ɦɚɫɫɢɜɚ ɞɥɹ ɷɬɨɣ ɰɟɥɢ ɫɨɯɪɚɧɢɬ ɩɚɦɹɬɶ ɢ ɜɪɟɦɹ).
ɉɟɪɟɞ ɫɨɫɬɚɜɥɟɧɢɟɦ ɨɫɧɨɜɧɨɣ ɱɚɫɬɢ ɚɥɝɨɪɢɬɦɚ, ɧɟɨɛɯɨɞɢɦɨ ɪɚɡɨɛɪɚɬɶɫɹ ɫ ɫɨɞɟɪɠɚɧɢɟɦ ɦɚɬɪɢɰɵ ɤɪɚɬɱɚɣɲɢɯ ɩɭɬɟɣ. Ɍɚɤ ɤɚɤ ɤɚɠɞɵɣ ɟɟ ɷɥɟɦɟɧɬ
D[i][j]
ɞɨɥɠɟɧ ɫɨɞɟɪɠɚɬɶ ɧɚɢɦɟɧɶɲɢɣ ɢɡ ɢɦɟɸɳɢɯɫɹ ɞɥɢɧ ɩɭɬɟɣ, ɬɨ ɫɪɚɡɭ ɦɨɠɧɨ ɫɤɚ­ɡɚɬɶ, ɱɬɨ ɞɥɹ ɟɞɢɧɢɱɧɨɣ ɜɟɪɲɢɧɵ ɨɧ ɪɚɜɟɧ ɧɭɥɸ, ɞɚɠɟ ɟɫɥɢ ɨɧɚ ɢɦɟɟɬ ɩɟɬɥɸ (ɨɬɪɢɰɚɬɟɥɶɧɵɟ ɰɢɤɥɵ ɧɟ ɪɚɫɫɦɚɬɪɢɜɚɸɬɫɹ), ɫɥɟɞɨɜɚɬɟɥɶɧɨ, ɜɫɟ ɷɥɟɦɟɧɬɵ ɝɥɚɜɧɨɣ ɞɢɚɝɨɧɚɥɢ (
D[i][i]) ɧɟɨɛɯɨɞɢɦɨ ɨɛɧɭɥɢɬɶ.
ɑɬɨɛɵ ɧɭɥɟɜɵɟ ɧɟɞɢɚɝɨɧɚɥɶɧɵɟ ɷɥɟɦɟɧɬɵ (ɦɚɬɪɢɰɚ ɫɦɟɠɧɨɫɬɢ ɦɨɝɥɚ ɢɦɟɬɶ ɧɭɥɢ ɜ ɬɟɯ ɦɟɫɬɚɯ, ɝɞɟ ɧɟɬ ɧɟɩɨɫɪɟɞɫɬɜɟɧɧɨɝɨ ɪɟɛɪɚ ɦɟɠɞɭ ɜɟɪɲɢɧɚ­ɦɢ
i ɢ j) ɫɦɟɧɢɥɢ ɩɨ ɜɨɡɦɨɠɧɨɫɬɢ ɫɜɨɟ ɡɧɚɱɟɧɢɟ, ɨɩɪɟɞɟɥɢɦ ɢɯ ɪɚɜɧɵɦɢ ɛɟɫɤɨ-
ɧɟɱɧɨɫɬɢ, ɤɨɬɨɪɚɹ ɜ ɩɪɨɝɪɚɦɦɟ ɦɨɠɟɬ ɹɜɥɹɬɶɫɹ, ɧɚɩɪɢɦɟɪ, ɦɚɤɫɢɦɚɥɶɧɨ ɜɨɡ­ɦɨɠɧɨɣ ɞɥɢɧɧɨɣ ɩɭɬɢ ɜ ɝɪɚɮɟ, ɥɢɛɨ ɩɪɨɫɬɨ – ɛɨɥɶɲɢɦ ɱɢɫɥɨɦ.
Ʉɥɸɱɟɜɚɹ ɱɚɫɬɶ ɚɥɝɨɪɢɬɦɚ, ɫɨɫɬɨɹ ɢɡ ɬɪɟɯ ɰɢɤɥɨɜ, ɜɵɪɚɠɟɧɢɹ ɢ ɭɫɥɨɜɧɨ­ɝɨ ɨɩɟɪɚɬɨɪɚ, ɡɚɩɢɫɵɜɚɟɬɫɹ ɞɨɫɬɚɬɨɱɧɨ ɤɨɦɩɚɤɬɧɨ:
ɞɥɹ k ɨɬ 1 ɞɨ |V| ɜɵɩɨɥɧɹɬɶ;
ɞɥɹ i ɨɬ 1 ɞɨ |V| ɜɵɩɨɥɧɹɬɶ;
ɞɥɹ j ɨɬ 1 ɞɨ |V| ɜɵɩɨɥɧɹɬɶ.
ȿɫɥɢ D[i][k]+D[k][j]<D[i][j] ɬɨ D[i][j] ĸD[i][k]+D[k][j].
Ʉɪɚɬɱɚɣɲɢɣ ɩɭɬɶ ɢɡ ɜɟɪɲɢɧɵ ɱɟɪɟɡ ɧɢɯ ɫɚɦɢɯ, ɬɚɤ ɢ ɱɟɪɟɡ ɦɧɨɠɟɫɬɜɨ ɞɪɭɝɢɯ ɜɟɪɲɢɧ ɦɚɥɶɧɵɦ ɢɡ
i ɜ j ɛɭɞɟɬ ɩɭɬɶ ɢɥɢ ɧɟ ɩɪɨɯɨɞɹɳɢɣ ɱɟɪɟɡ k, ɢɥɢ ɩɪɨɯɨɞɹɳɢɣ. Ɂɚ-
i ɜ ɜɟɪɲɢɧɭ j ɦɨɠɟɬ ɩɪɨɯɨɞɢɬɶ, ɤɚɤ ɬɨɥɶɤɨ
kא(1, …, |V|). Ɉɩɬɢ-
ɤɥɸɱɢɬɶ ɨ ɧɚɥɢɱɢɢ ɜɬɨɪɨɝɨ ɫɥɭɱɚɹ, ɡɧɚɱɢɬ ɭɫɬɚɧɨɜɢɬɶ, ɱɬɨ ɬɚɤɨɣ ɩɭɬɶ ɢɞɟɬ
i ɞɨ k, ɚ ɡɚɬɟɦ ɢɡ k ɞɨ j, ɩɨɷɬɨɦɭ ɞɨɥɠɧɨ ɡɚɦɟɧɢɬɶ, ɡɧɚɱɟɧɢɟ ɤɪɚɬɱɚɣɲɟɝɨ ɩɭ-
ɢɡ
D[i][j] ɫɭɦɦɨɣ D[i][k]+D[k][j].
ɬɢ
ɉɨɥɨɠɢɦ, ɱɬɨ ɜ ɤɚɱɟɫɬɜɟ ɦɚɬɪɢɰɵ ɫɦɟɠɧɨɫɬɢ, ɤɚɠɞɵɣ ɷɥɟɦɟɧɬ ɤɨɬɨɪɨɣ ɯɪɚɧɢɬ ɜɟɫ ɧɟɤɨɬɨɪɨɝɨ ɪɟɛɪɚ, ɛɵɥɚ ɡɚɞɚɧɚ ɫɥɟɞɭɸɳɚɹ ɦɚɬɪɢɰɚ:
0 9 2
1 0 4
2 4 0
39
Ʉɨɥɢɱɟɫɬɜɨ ɜɟɪɲɢɧ ɜ ɝɪɚɮɟ, ɩɪɟɞɫɬɚɜɥɟɧɢɟɦ ɤɨɬɨɪɨɝɨ ɹɜɥɹɟɬɫɹ ɦɚɬɪɢɰɚ, ɪɚɜɧɨ 3, ɢ ɦɟɠɞɭ ɤɚɠɞɵɦɢ ɞɜɭɦɹ ɜɟɪɲɢɧɚɦɢ ɫɭɳɟɫɬɜɭɟɬ ɪɟɛɪɨ. ȼɨɬ ɷɬɨɬ ɝɪɚɮ:
Ɂɚɞɚɱɚ ɚɥɝɨɪɢɬɦɚ: ɩɟɪɟɡɚɩɢɫɚɬɶ ɦɚɬɪɢɰɭ ɬɚɤ, ɱɬɨɛɵ ɤɚɠɞɚɹ ɹɱɟɣɤɚ ɜɦɟɫɬɨ ɜɟɫɚ ɪɟɛɪɚ ɢɡ i ɜ j, ɫɨɞɟɪɠɚɥɚ ɤɪɚɬɱɚɣɲɢɣ ɩɭɬɶ ɢɡ i ɜ j. ȼ ɪɟɡɭɥɶɬɚɬɟ ɬɟɫɬɢɪɨɜɚ­ɧɢɹ ɩɪɨɝɪɚɦɦɵ ɩɨɤɚɡɵɜɚɟɬ ɡɚɦɟɧɭ ɞɜɭɯ ɡɧɚɱɟɧɢɣ ɜ ɧɟɣ.
ɒɚɝɢ ɜɵɩɨɥɧɟɧɢɹ ɨɫɧɨɜɧɨɣ ɱɚɫɬɢ ɚɥɝɨɪɢɬɦɚ ɩɨɤɚɡɚɧɵ ɧɚ ɪɢɫ. 9.
Ɋɢɫ. 9. ɉɨɫɥɟɞɨɜɚɬɟɥɶɧɨɫɬɶ ɜɵɩɨɥɧɟɧɢɹ Ⱥɥɝɨɪɢɬɦɚ Ɏɥɨɣɞɚ-ɍɨɪɲɟɥɥɚ
ɂɯ ɫɬɨɥɶɤɨ ɢɡ-ɡɚ ɬɨɝɨ, ɱɬɨ ɜɪɟɦɹ ɜɵɩɨɥɧɟɧɢɹ ɦɟɬɨɞɚ ɪɚɜɧɨ O(|V| ɢɦɟɟɬ 3 ɜɟɪɲɢɧɵ, ɚ 3
3
= 27. ɉɟɪɜɚɹ ɡɚɦɟɧɚ ɩɪɨɢɫɯɨɞɢɬ ɧɚ ɢɬɟɪɚɰɢɢ, ɩɪɢ ɤɨɬɨ-
3
). Ƚɪɚɮ
ɪɨɣ k = 1, i = 2, ɚ j = 3. ȼ ɬɨɬ ɦɨɦɟɧɬ D[2][1] = 1, D[1][3] = 2, D[2][3] = 4. ɍɫɥɨ­ɜɢɟ ɢɫɬɢɧɧɨ, ɬ. ɟ. D[1][3]+D[3][2] = 3, ɚ 3<4, ɫɥɟɞɨɜɚɬɟɥɶɧɨ, ɷɥɟɦɟɧɬ ɦɚɬɪɢɰɵ
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]