2. G = <V, E>
множество вершин
(vertices)
|V|=N
множество –пар вершин
дуг (arcs)
|E|=M
ГРАФГРАФ
3. БИБЛИОТЕКАБИБЛИОТЕКА STLSTL
STANDARD TEMPLATE LIBRARY
стандартная библиотека шаблонов
Это библиотека шаблонов и
функций С++, включающая в
себя различные контейнеры
( , ,данных список очередь
, , -множество отображение хэш
,таблица очередь с
)приоритетами и базовые
( , )алгоритмы сортировка поиск
5. VECTOR – динамический массив
– size() – возвращает текущий размер вектора
– begin() – ,возвращает итератор установленный на начало вектора
– end() - ,возвращает итератор установленный на конец вектора
– push_back() – записывает значение в конец вектора
– insert() – ,записывает значение непосредственно перед элементом
на который ссылается итератор
– erase() – удаляет элемент из вектора
– …
vector<char> iv; //пустой вектор
int i; //счетчик
for (i=0; i<10; i++) v[i] = i + ’a’; //заполнение
//устанавливаем итератор в конец
vector<char>::iterator p=v.end();
v.insert (p,3,’X’); //вставляем три символа Х в
вектор
//выводим на экран содержимое вектора
for (i=0; i<v.size(); i++) cout<< v[i] << “ “;
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
6. VECTOR – динамический массив
– size() – возвращает текущий размер вектора
– begin() – ,возвращает итератор установленный на начало вектора
– end() - ,возвращает итератор установленный на конец вектора
– push_back() – записывает значение в конец вектора
– insert() – ,записывает значение непосредственно перед элементом
на который ссылается итератор
– erase() – удаляет элемент из вектора
– …
:на экране
a b c d e f g h i j X X X
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
7. SET – ;упорядоченные уникальные значения
MAP – а :ссоциативный контейнер
уникальный ключ – значение
map<string, string> m1; //ключ и значение – строковый тип
//заполнение: ключ-значение хранится с помощью стандартного типа пары
m1.insert(pair<string, string>("apple", "a small red fruit"));
m1.insert(pair<string, string>("orange", "a small orange fruit"));
m1["banana"] = "a long yellow fruit"; //заполнение
//вывод на экран вариант 1
map<string, string>::iterator it = m1.begin();
for ( ; it != m1.end(); it++) {
cout << it->first << ": " << it->second << endl;
}
//вывод на экран вариант 2
cout << m1["apple"] << endl;
cout << m1["orange"] << endl;
cout << m1["banana"] << endl;
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
8. MAP – а :ссоциативный контейнер
уникальный ключ – значение
на экране:
apple: a small red fruit
orange: a small orange fruit
banana: a long yellow fruit
a small red fruit
a small orange fruit
a long yellow fruit
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
10. , ,Вершины соединенные дугой называются
смежными
, ,Дуги имеющие общую вершину также
называются смежными
Дуга и любая из ее вершин называются
инцидентными
СМЕЖНОСТЬ иСМЕЖНОСТЬ и
ИНЦИДЕНТНОСТЬИНЦИДЕНТНОСТЬ
12. Это двумерный массив размером NxN, где
N – мощность множества вершин V (|V|=N)
МАТРИЦАМАТРИЦА
СМЕЖНОСТИСМЕЖНОСТИ
//двумерный массив
#include <vector>
typedef std::vector< std::vector< bool > > Matrix;
Matrix m;
14. Это одномерный массив размером N, где
N – мощность множества вершин V (|V|=N). Элемент
– ,массива указатель на начало списка где храниться
,перечень вершин смежных с рассматриваемой
СТРУКТУРАСТРУКТУРА
СМЕЖНОСТИСМЕЖНОСТИ
struct node
{ int v; node* next;
node (int x, node* t) { v = x; next = t; }
};
typedef node* link;
vector <link> adj;
15. Это двумерный массив размером Мx2,
где М – мощность множества ребер Е (|Е|=М)
МАССИВ ДУГМАССИВ ДУГ
//map
#include <map>
typedef std::map< int, int > Matrix;
Matrix m;
16. Использование в прикладныхИспользование в прикладных
задачахзадачах
• Географические карты и маршруты
• Расписания (scheduling)
• Web (гипертекст)
• Сети (networks) и т.д.
18. ПУТЬПУТЬ
Путь – последовательность вершин, соединенных
ребрами
Длина пути – число ребер(невзвешенная) или
сумма весов всех ребер (взвешенная),
входящих в путь
20. АЛГОРИТМАЛГОРИТМ
ДЕЙКСТРЫДЕЙКСТРЫИнициализация
Метка начальной вершины полагается равной 0, метки остальных
вершин — бесконечности (расстояния до них пока неизвестны)
Шаг алгоритма
• Если все вершины посещены, алгоритм завершается
• В противном случае из еще не посещенных вершин выбирается
вершина U, имеющая минимальную метку
• Рассматриваются все смежные к ней вершины. Для каждой из них
определяется новая длина пути, равную сумме текущей метки U и
длины ребра, их соединяющего
• Если полученная длина меньше метки новой вершины, заменим
метку этой длиной
• Рассмотрев все такие вершины, пометим вершину U как
посещенную и повторим шаг
…
23. BBreadthreadth-F-Firstirst SSearchearch
Поиск в ширинуПоиск в ширину
метод анализа структуры графа, при
котором каждый уровень полностью
подвергается анализу до перехода к
следующему уровню
24. • Рассматриваются все вершины, связанные
с текущей
• Выбирается та вершина, которая раньше
была рассмотрена
•
• Структура данных – очередь
25.
26.
27.
28. Depth-First SearchDepth-First Search
Поиск в глубинуПоиск в глубину
метод анализа структуры графа, при
котором узлы анализируются
последовательно, по мере продвижения
вглубь, а далее анализируются
ближайшие к стартовому
29. • Поиск начинается с некоторой
фиксированной вершины v
• Рассматривается вершина u, смежная с v
• Если нет вершин, смежных с текущей,
возврат к предыдущей (если эта вершина
– v, то просмотр окончен)
• Структура данных – стек