Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <list>
- using namespace std;
- int main( )
- {
- // Количество вершин графа
- int n;
- cin >> n;
- // Списки смежности вершин с расстоянием
- vector< vector< pair< int, int > > > G(n);
- // Массив посещённых вершин, иницилизируем 0
- vector< bool > visited(n, false);
- // Массив расстояний из вершины from, инициализируем максимальным числом
- vector< int > d(n, INT32_MAX);
- // Ввод дерева
- for (int i = 0; i < n; ++i)
- {
- for (int j = 0; j < n; ++j)
- {
- int dist;
- cin >> dist;
- // Если пути из одной вершины в другой нет, то помечается как -1
- if (dist > -1)
- {
- G[i].push_back(make_pair(j, dist));
- //G[j].push_back(make_pair(i, dist)); // Неориентированный
- }
- }
- }
- //*****************************************
- // Вводим вершину начала
- int from;
- cin >> from;
- // Обозначаем путь до этой вершины 0 (путь из самой в себя)
- d[from] = 0;
- for (int i = 0; i < n; ++i)
- {
- // Ищем вершину с минимальным расстоянием от начальной вершины from
- int min_v = INT32_MAX;
- for (int k = 0; k < n; ++k)
- {
- if ((min_v == INT32_MAX || d[k] < d[min_v]) && !visited[k])
- min_v = k;
- }
- // Если нашлась такая минимальная
- if (min_v != INT32_MAX && d[min_v] != INT32_MAX)
- {
- // Посещаем её
- visited[min_v] = true;
- // Проходим смежные ей вершины
- for (auto v : G[min_v])
- {
- // Если в них не заходили
- if (!visited[v.first])
- {
- // Расстояние от начальной вершины до смежных минимальной вершине
- // Которые не помещали будет равно минимуму из
- // Расстояния от from до самой смежной вершины
- // и
- // Расстояния от from до минимальной + расстояние от минимальной до смежной ей
- d[v.first] = min(d[v.first], d[min_v] + v.second);
- }
- }
- }
- else break;
- }
- // Выводим расстояния из начальной вершины до всех остальных
- // т.е расстояние d[3] расстояние от вершины from до 4-й
- for (int i = 0; i < n; ++i)
- {
- cout << d[i]<< ' ';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment