Skip to content

Commit 3919d6c

Browse files
Dijkstra's algorithm implementation and popup logic
1 parent 2185674 commit 3919d6c

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

script.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,71 @@ function startDFS() {
129129
}
130130
step();
131131
}
132+
/* Gaurang Joshi - Dijkstra's algorithm implementation and popup logic */
133+
function startDijkstra() {
134+
if (nodes.length === 0) {
135+
logMessage("No nodes available. Please create nodes to start Dijkstra's algorithm.");
136+
return;
137+
}
138+
console.log("Starting Dijkstra's Algorithm...");
139+
let distances = {};
140+
let visited = new Set();
141+
let queue = [{ node: nodes[0], cost: 0 }];
142+
nodes.forEach(node => distances[node.id] = Infinity);
143+
distances[nodes[0].id] = 0;
144+
logDiv.innerHTML = "<strong>Dijkstra Execution:</strong><br>";
145+
function step() {
146+
console.log("Queue:", queue);
147+
console.log("Visited:", visited);
148+
if (queue.length === 0) return;
149+
queue.sort((a, b) => a.cost - b.cost);
150+
let { node, cost } = queue.shift();
151+
if (visited.has(node)) return step();
152+
visited.add(node);
153+
logMessage(`Visiting Node ${node.id} with cost ${cost}`);
154+
ctx.fillStyle = "orange";
155+
ctx.beginPath();
156+
ctx.arc(node.x, node.y, 20, 0, Math.PI * 2);
157+
ctx.fill();
158+
edges.filter(e => e.from.id === node.id).forEach(edge => {
159+
let newCost = cost + edge.weight;
160+
if (newCost < distances[edge.to.id]) {
161+
distances[edge.to.id] = newCost;
162+
queue.push({ node: edge.to, cost: newCost });
163+
logMessage(`Updating distance of Node ${edge.to.id} to ${newCost}`);
164+
}
165+
});
166+
// Ensure canvas updates correctly
167+
ctx.clearRect(0, 0, canvas.width, canvas.height);
168+
drawGraph();
169+
setTimeout(step, 500);
170+
}
171+
step();
172+
}
173+
174+
function showPopup(content) {
175+
const popup = document.getElementById("infoPopup");
176+
popup.innerHTML = content;
177+
popup.classList.remove("hidden");
178+
popup.classList.add("visible");
179+
}
180+
181+
function hidePopup() {
182+
const popup = document.getElementById("infoPopup");
183+
popup.classList.remove("visible");
184+
popup.classList.add("hidden");
185+
}
186+
187+
function resetGraph() {
188+
nodes = [];
189+
edges = [];
190+
selectedNode = null;
191+
logDiv.innerHTML = "";
192+
drawGraph();
193+
logMessage("Graph has been reset.");
194+
}
195+
196+
function logMessage(message) {
197+
logDiv.innerHTML += message + "<br>";
198+
}
132199

0 commit comments

Comments
 (0)