Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b26cae1

Browse files
author
hasibulislam999
committed
Design Graph with Shortest Path Calculator problem solved
1 parent f14ff5c commit b26cae1

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/**
2+
* Title: Design Graph with Shortest Path Calculator
3+
* Description: There is a directed weighted graph that consists of n nodes numbered from 0 to n - 1. The edges of the graph are initially represented by the given array edges where edges[i] = [fromi, toi, edgeCosti] meaning that there is an edge from fromi to toi with the cost edgeCosti.
4+
* Author: Hasibul Islam
5+
* Date: 04/05/2023
6+
*/
7+
8+
/**
9+
* @param {number} n
10+
* @param {number[][]} edges
11+
*/
12+
var Graph = function (n, edges) {
13+
this.map = new Map();
14+
let map = this.map;
15+
for (let i = 0; i < edges.length; i++) {
16+
let edge = edges[i];
17+
let from = edge[0];
18+
let to = edge[1];
19+
let cost = edge[2];
20+
if (!map.has(from)) {
21+
map.set(from, new Set());
22+
}
23+
24+
map.get(from).add({ to, cost });
25+
}
26+
};
27+
28+
/**
29+
* @param {number[]} edge
30+
* @return {void}
31+
*/
32+
Graph.prototype.addEdge = function (edge) {
33+
let map = this.map;
34+
let from = edge[0];
35+
let to = edge[1];
36+
let cost = edge[2];
37+
if (!map.has(from)) {
38+
map.set(from, new Set());
39+
}
40+
41+
map.get(from).add({ to, cost });
42+
};
43+
44+
/**
45+
* @param {number} node1
46+
* @param {number} node2
47+
* @return {number}
48+
*/
49+
Graph.prototype.shortestPath = function (node1, node2) {
50+
const heap = new MinPriorityQueue();
51+
heap.enqueue({ node: node1, cost: 0 }, 0);
52+
let visited = new Set();
53+
54+
while (heap.size() > 0) {
55+
const top = heap.dequeue().element;
56+
57+
if (visited.has(top.node)) {
58+
continue;
59+
}
60+
visited.add(top.node);
61+
if (top.node === node2) {
62+
return top.cost;
63+
}
64+
let next = this.map.get(top.node);
65+
if (next) {
66+
for (let n of next) {
67+
heap.enqueue(
68+
{ node: n.to, cost: top.cost + n.cost },
69+
top.cost + n.cost
70+
);
71+
}
72+
}
73+
}
74+
75+
return -1;
76+
};
77+
78+
/**
79+
* Your Graph object will be instantiated and called as such:
80+
* var obj = new Graph(n, edges)
81+
* obj.addEdge(edge)
82+
* var param_2 = obj.shortestPath(node1,node2)
83+
*/

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /