vector<int> dijkstra(vector<vector<int>> &vec, int vertices, int edges, int source)
{
vector <pair<int,int>> adj[vertices];
for (int i=0;i<edges;i++)
{
int u = vec[i][0];
int v = vec[i][1];
int w = vec[i][2];
adj[u].push_back(make_pair(v,w));
adj[v].push_back(make_pair(u,w));
}
vector<int> distance(vertices,INT_MAX);
distance[source]= 0;
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int> > > pq;
pq.push(make_pair(0,source));
while(!pq.empty())
{
int dis = pq.top().first;
int node = pq.top().second;
pq.pop();
for (auto adjacentNode : adj[node])
{
int currNode = adjacentNode.first;
int dfn = adjacentNode.second;
if (dfn+dis < distance[currNode])
{
distance[currNode]= dfn+dis;
pq.push(make_pair(distance[currNode], currNode));
}
}
}
return distance;
}
I was writing code for Dijkstra's Algorithm using priority queue but forgot to initialize the visited array to keep track of visited vertices. I submitted the code and all the test cases passed. Is the visited array really needed, or am I missing something?