-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathacm_dijkstra
43 lines (42 loc) · 1.15 KB
/
acm_dijkstra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <fstream>
#include <sstring>
#include <string>
#include <vector>
#include <climits>
using namespace std;
class dijkstra{
vector <vector <int>> adjMatrix;
vector <int> path;
vector <int> dist;
public:
dijkstra(int nbNodes){
for(int i = 0; i <= nbNodes; i++){
vector <int> line;
for(int j = 0; j <= nbNodes; j++){
line.push_back(-1);}
adjMatrix.push_back(line);}}
void print();
void solution(int source, int nbNodes);};
void dijkstra::solution(int source, int nbNoodes){
int closestNode, min;
vector <int> visited;
for(int i = 1; i <= nbNodes; i++){
dist[i] = adjMatrix[source][i];
visited[i] = 0;
path[i] = source;}
visited[source] = 1;
for(int i = 1; i <= nbNodes; i++){
closestNode = -1;
min = int_max;
for(int j =1; j <= nbNodes; j++){
if(visited[j] == 0){
if(dist[j] < min){
min = dist[j];
closestNode = j;}}}
if(closestNode = -1) return;
visited[closestNode] = 1;
for(int v = 1; v <= nbNodes; v++){
if((visited[v] == 0) && (dist[closestNode] + adjMatrix[closestNode][v] < dist[v])){
dist[v] = dist[closestNode] + adjMatrix[closestNode][v];
path[v] = closestNode;}}}}