@@ -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