-
Notifications
You must be signed in to change notification settings - Fork 52
/
dijkstras.cpp
62 lines (55 loc) · 1.59 KB
/
dijkstras.cpp
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <bits/stdc++.h>
using namespace std;
int miniDist(int distance[], bool Tset[]) // finding minimum distance
{
int minimum = INT_MAX, ind;
for (int k = 0; k < 6; k++)
{
if (Tset[k] == false && distance[k] <= minimum)
{
minimum = distance[k];
ind = k;
}
}
return ind;
}
void DijkstraAlgo(int graph[6][6], int src) // adjacency matrix
{
int distance[6]; // // array to calculate the minimum distance for each node
bool Tset[6]; // boolean array to mark visited and unvisited for each node
for (int k = 0; k < 6; k++)
{
distance[k] = INT_MAX;
Tset[k] = false;
}
distance[src] = 0; // Source vertex distance is set 0
for (int k = 0; k < 6; k++)
{
int m = miniDist(distance, Tset);
Tset[m] = true;
for (int k = 0; k < 6; k++)
{
// updating the distance of neighbouring vertex
if (!Tset[k] && graph[m][k] && distance[m] != INT_MAX && distance[m] + graph[m][k] < distance[k])
distance[k] = distance[m] + graph[m][k];
}
}
cout << "Vertex\t\tDistance from source vertex" << endl;
for (int k = 0; k < 6; k++)
{
char str = 65 + k;
cout << str << "\t\t\t" << distance[k] << endl;
}
}
int main()
{
int graph[6][6] = {
{0, 1, 2, 0, 0, 0},
{1, 0, 0, 5, 1, 0},
{2, 0, 0, 2, 3, 0},
{0, 5, 2, 0, 2, 2},
{0, 1, 3, 2, 0, 1},
{0, 0, 0, 2, 1, 0}};
DijkstraAlgo(graph, 0);
return 0;
}