#include <iostream>
#include <limits>
#include <queue>
#include <vector>
Go to the source code of this file.
|
void | dijkstra (const std::vector< std::vector< Edge >> &graph, int source, std::vector< int > &distances, std::vector< int > &parents) |
|
int | main () |
|
|
const int | INF = std::numeric_limits<int>::max() |
|
◆ dijkstra()
void dijkstra |
( |
const std::vector< std::vector< Edge >> & |
graph, |
|
|
int |
source, |
|
|
std::vector< int > & |
distances, |
|
|
std::vector< int > & |
parents |
|
) |
| |
Definition at line 53 of file ospf.cpp.
58 distances.assign(n,
INF);
59 parents.assign(n, -1);
61 distances[source] = 0;
62 std::priority_queue<std::pair<int, int>,
63 std::vector<std::pair<int, int>>,
64 std::greater<std::pair<int, int>>>
66 pq.push(std::make_pair(0, source));
69 int current = pq.top().second;
70 int distance = pq.top().first;
73 if (distance > distances[current])
76 for (
const Edge &edge : graph[current]) {
77 int neighbor = edge.to;
78 int new_distance = distance + edge.weight;
80 if (new_distance < distances[neighbor]) {
81 distances[neighbor] = new_distance;
82 parents[neighbor] = current;
83 pq.push(std::make_pair(new_distance, neighbor));
References INF.
Referenced by main().
◆ main()
Definition at line 89 of file ospf.cpp.
91 std::vector<std::vector<Edge>> graph(n);
93 graph[0].push_back({1, 2});
94 graph[0].push_back({2, 5});
95 graph[1].push_back({2, 1});
96 graph[1].push_back({3, 3});
97 graph[2].push_back({3, 1});
100 std::vector<int> distances, parents;
101 dijkstra(graph, source, distances, parents);
104 std::cout <<
"Shortest distance from " << source <<
" to " << destination
105 <<
": " << distances[destination] << std::endl;
106 std::cout <<
"Shortest path: ";
107 for (
int node = destination; node != -1; node = parents[node])
108 std::cout << node <<
" ";
109 std::cout << std::endl;
void dijkstra(const std::vector< std::vector< Edge >> &graph, int source, std::vector< int > &distances, std::vector< int > &parents)
References dijkstra().
◆ INF
const int INF = std::numeric_limits<int>::max() |