@@ -4,11 +4,9 @@ use crate::utils;
44// TODO: add iterator bfs
55// TODO: add iterator dfs
66// TODO: consider using a Vec<u8> to store the points
7- // TODO: Extract painting the graph thru macroquad to a different module
8- // TODO: Some fields in this struct might be better stored in the main module
9- /// ### Graph
7+ /// ### Dijkstra Graph
108///
11- /// It contains nodes and edges connecting those nodes .
9+ /// Data is stored in an adjacency list as an array .
1210pub ( crate ) struct DijkstraGraph
1311{
1412 /// The actual graph data is stored here.
@@ -257,223 +255,127 @@ impl DijkstraGraph
257255 }
258256
259257 /// Replaces the current graph with a small one
260- pub fn insert_small_graph_a ( & mut self )
258+ pub fn insert_small_graph ( & mut self )
261259 {
262260 self . clear ( ) ;
263261
264- self . add_point ( 1 , 942_f32 , 355_f32 ) ;
265- self . add_point ( 2 , 720_f32 , 208_f32 ) ;
266- self . add_point ( 3 , 198_f32 , 342_f32 ) ;
267- self . add_point ( 4 , 463_f32 , 507_f32 ) ;
268- self . add_point ( 5 , 735_f32 , 513_f32 ) ;
269- self . add_point ( 6 , 458_f32 , 346_f32 ) ;
270- self . add_point ( 7 , 468_f32 , 202_f32 ) ;
271- self . add_point ( 8 , 721_f32 , 360_f32 ) ;
272-
273- self . add_line ( 4 , 5 , 3 ) ;
274- self . add_line ( 3 , 6 , 5 ) ;
275- self . add_line ( 6 , 8 , 4 ) ;
276- self . add_line ( 7 , 2 , 5 ) ;
277- self . add_line ( 2 , 1 , 5 ) ;
278- self . add_line ( 6 , 2 , 7 ) ;
279- self . add_line ( 4 , 8 , 5 ) ;
280- self . add_line ( 8 , 1 , 4 ) ;
281- self . add_line ( 3 , 7 , 4 ) ;
282- self . add_line ( 3 , 4 , 7 ) ;
283- self . add_line ( 7 , 8 , 6 ) ;
284- self . add_line ( 6 , 5 , 8 ) ;
285- self . add_line ( 5 , 1 , 3 ) ;
286- }
287-
288- /// Replaces the current graph with a small one
289- pub fn insert_small_graph_b ( & mut self )
290- {
291- self . clear ( ) ;
292-
293- let mut graph = DijkstraGraph {
294- points : BTreeMap :: < u8 , DijkstraNode > :: from ( [
295- ( 1 , DijkstraNode :: new ( IVec2 { x : 783 , y : 102 } , 1 ) ) ,
296- ( 2 , DijkstraNode :: new ( IVec2 { x : 412 , y : 295 } , 2 ) ) ,
297- ( 3 , DijkstraNode :: new ( IVec2 { x : 680 , y : 308 } , 3 ) ) ,
298- ( 4 , DijkstraNode :: new ( IVec2 { x : 509 , y : 459 } , 4 ) ) ,
299- ( 5 , DijkstraNode :: new ( IVec2 { x : 330 , y : 603 } , 5 ) ) ,
300- ( 6 , DijkstraNode :: new ( IVec2 { x : 160 , y : 442 } , 6 ) ) ,
301- ( 7 , DijkstraNode :: new ( IVec2 { x : 174 , y : 196 } , 7 ) ) ,
302- ( 8 , DijkstraNode :: new ( IVec2 { x : 411 , y : 78 } , 8 ) ) ,
303- ( 9 , DijkstraNode :: new ( IVec2 { x : 1003 , y : 239 } , 9 ) ) ,
304- ] ) ,
305- lines : HashMap :: < Edge , u16 > :: from ( [
306- ( Edge { from : 4 , to : 5 } , 2 ) ,
307- ( Edge { from : 3 , to : 4 } , 3 ) ,
308- ( Edge { from : 2 , to : 6 } , 3 ) ,
309- ( Edge { from : 1 , to : 9 } , 7 ) ,
310- ( Edge { from : 4 , to : 2 } , 1 ) ,
311- ( Edge { from : 9 , to : 3 } , 1 ) ,
312- ( Edge { from : 6 , to : 2 } , 3 ) ,
313- ( Edge { from : 7 , to : 8 } , 2 ) ,
314- ( Edge { from : 2 , to : 4 } , 1 ) ,
315- ( Edge { from : 2 , to : 8 } , 3 ) ,
316- ( Edge { from : 2 , to : 7 } , 5 ) ,
317- ( Edge { from : 2 , to : 1 } , 1 ) ,
318- ( Edge { from : 5 , to : 6 } , 2 ) ,
319- ( Edge { from : 1 , to : 2 } , 1 ) ,
320- ( Edge { from : 3 , to : 9 } , 1 ) ,
321- ( Edge { from : 4 , to : 3 } , 3 ) ,
322- ( Edge { from : 1 , to : 8 } , 1 ) ,
323- ( Edge { from : 8 , to : 1 } , 1 ) ,
324- ( Edge { from : 6 , to : 7 } , 2 ) ,
325- ( Edge { from : 8 , to : 7 } , 2 ) ,
326- ( Edge { from : 8 , to : 2 } , 3 ) ,
327- ( Edge { from : 2 , to : 3 } , 1 ) ,
328- ( Edge { from : 7 , to : 2 } , 5 ) ,
329- ( Edge { from : 9 , to : 1 } , 7 ) ,
330- ( Edge { from : 3 , to : 2 } , 1 ) ,
331- ( Edge { from : 5 , to : 4 } , 2 ) ,
332- ( Edge { from : 6 , to : 5 } , 2 ) ,
333- ( Edge { from : 7 , to : 6 } , 2 ) ,
334- ] ) ,
335- start : Some ( 7 ) ,
336- end : Some ( 9 ) ,
337- ..DijkstraGraph :: default ( )
338- } ;
262+ self . append_point ( 942_f32 , 355_f32 ) ;
263+ self . append_point ( 720_f32 , 208_f32 ) ;
264+ self . append_point ( 198_f32 , 342_f32 ) ;
265+ self . append_point ( 463_f32 , 507_f32 ) ;
266+ self . append_point ( 735_f32 , 513_f32 ) ;
267+ self . append_point ( 458_f32 , 346_f32 ) ;
268+ self . append_point ( 468_f32 , 202_f32 ) ;
269+ self . append_point ( 721_f32 , 360_f32 ) ;
270+
271+ self . add_line ( 3 , 4 , 3 ) ;
272+ self . add_line ( 2 , 5 , 5 ) ;
273+ self . add_line ( 5 , 7 , 4 ) ;
274+ self . add_line ( 6 , 1 , 5 ) ;
275+ self . add_line ( 1 , 0 , 5 ) ;
276+ self . add_line ( 5 , 1 , 7 ) ;
277+ self . add_line ( 3 , 7 , 5 ) ;
278+ self . add_line ( 7 , 0 , 4 ) ;
279+ self . add_line ( 2 , 6 , 4 ) ;
280+ self . add_line ( 2 , 3 , 7 ) ;
281+ self . add_line ( 6 , 7 , 6 ) ;
282+ self . add_line ( 5 , 4 , 8 ) ;
283+ self . add_line ( 4 , 0 , 3 ) ;
339284 }
340285
341286 /// Replaces the current graph with a medium-sized one
342287 pub fn insert_medium_graph ( & mut self )
343288 {
344289 self . clear ( ) ;
345290
346- self . add_point ( 1 , 959_f32 , 211_f32 ) ;
347- self . add_point ( 2 , 967_f32 , 394_f32 ) ;
348- self . add_point ( 3 , 946_f32 , 532_f32 ) ;
349- self . add_point ( 4 , 144_f32 , 377_f32 ) ;
350- self . add_point ( 5 , 775_f32 , 295_f32 ) ;
351- self . add_point ( 6 , 734_f32 , 523_f32 ) ;
352- self . add_point ( 7 , 559_f32 , 493_f32 ) ;
353- self . add_point ( 8 , 570_f32 , 361_f32 ) ;
354- self . add_point ( 9 , 569_f32 , 200_f32 ) ;
355- self . add_point ( 10 , 353_f32 , 206_f32 ) ;
356- self . add_point ( 11 , 355_f32 , 350_f32 ) ;
357- self . add_point ( 12 , 342_f32 , 488_f32 ) ;
358-
359- self . add_line ( 11 , 7 , 4 ) ;
360- self . add_line ( 8 , 2 , 5 ) ;
361- self . add_line ( 4 , 10 , 4 ) ;
362- self . add_line ( 12 , 7 , 4 ) ;
363- self . add_line ( 4 , 12 , 6 ) ;
364- self . add_line ( 6 , 3 , 20 ) ;
365- self . add_line ( 8 , 5 , 3 ) ;
366- self . add_line ( 12 , 8 , 3 ) ;
367- self . add_line ( 9 , 5 , 3 ) ;
368- self . add_line ( 11 , 8 , 3 ) ;
369- self . add_line ( 4 , 11 , 5 ) ;
370- self . add_line ( 5 , 1 , 1 ) ;
371- self . add_line ( 9 , 1 , 5 ) ;
372- self . add_line ( 10 , 9 , 4 ) ;
373- self . add_line ( 7 , 6 , 7 ) ;
374- self . add_line ( 5 , 2 , 2 ) ;
375- }
376-
377- /// Replaces the current graph with a medium-sized one
378- pub fn insert_medium_graph ( & mut self )
379- {
380- self . clear ( ) ;
381-
382- let mut graph = DijkstraGraph {
383- points : BTreeMap :: < u8 , DijkstraNode > :: from ( [
384- ( 1 , DijkstraNode :: new ( IVec2 { x : 970 , y : 108 } , 1 ) ) ,
385- ( 2 , DijkstraNode :: new ( IVec2 { x : 991 , y : 340 } , 2 ) ) ,
386- ( 3 , DijkstraNode :: new ( IVec2 { x : 1023 , y : 580 } , 3 ) ) ,
387- ( 4 , DijkstraNode :: new ( IVec2 { x : 509 , y : 459 } , 4 ) ) ,
388- ( 5 , DijkstraNode :: new ( IVec2 { x : 750 , y : 537 } , 5 ) ) ,
389- ( 6 , DijkstraNode :: new ( IVec2 { x : 747 , y : 262 } , 6 ) ) ,
390- ( 7 , DijkstraNode :: new ( IVec2 { x : 535 , y : 237 } , 7 ) ) ,
391- ( 8 , DijkstraNode :: new ( IVec2 { x : 497 , y : 433 } , 8 ) ) ,
392- ( 9 , DijkstraNode :: new ( IVec2 { x : 352 , y : 379 } , 9 ) ) ,
393- ( 10 , DijkstraNode :: new ( IVec2 { x : 308 , y : 266 } , 10 ) ) ,
394- ( 16 , DijkstraNode :: new ( IVec2 { x : 163 , y : 205 } , 11 ) ) ,
395- ( 17 , DijkstraNode :: new ( IVec2 { x : 149 , y : 346 } , 12 ) ) ,
396- ( 18 , DijkstraNode :: new ( IVec2 { x : 620 , y : 550 } , 13 ) ) ,
397- ] ) ,
398- lines : HashMap :: < Edge , u16 > :: from ( [
399- ( Edge { from : 5 , to : 4 } , 2 ) ,
400- ( Edge { from : 18 , to : 5 } , 7 ) ,
401- ( Edge { from : 6 , to : 1 } , 6 ) ,
402- ( Edge { from : 8 , to : 18 } , 6 ) ,
403- ( Edge { from : 9 , to : 8 } , 8 ) ,
404- ( Edge { from : 4 , to : 2 } , 5 ) ,
405- ( Edge { from : 6 , to : 4 } , 9 ) ,
406- ( Edge { from : 4 , to : 3 } , 4 ) ,
407- ( Edge { from : 17 , to : 10 } , 8 ) ,
408- ( Edge { from : 10 , to : 7 } , 12 ) ,
409- ( Edge { from : 16 , to : 10 } , 7 ) ,
410- ( Edge { from : 8 , to : 6 } , 4 ) ,
411- ( Edge { from : 10 , to : 9 } , 11 ) ,
412- ( Edge { from : 17 , to : 9 } , 4 ) ,
413- ( Edge { from : 7 , to : 6 } , 5 ) ,
414- ] ) ,
415- start : Some ( 10 ) ,
416- end : Some ( 4 ) ,
417- ..DijkstraGraph :: default ( )
418- } ;
291+ self . append_point ( 959_f32 , 211_f32 ) ;
292+ self . append_point ( 967_f32 , 394_f32 ) ;
293+ self . append_point ( 946_f32 , 532_f32 ) ;
294+ self . append_point ( 144_f32 , 377_f32 ) ;
295+ self . append_point ( 775_f32 , 295_f32 ) ;
296+ self . append_point ( 734_f32 , 523_f32 ) ;
297+ self . append_point ( 559_f32 , 493_f32 ) ;
298+ self . append_point ( 570_f32 , 361_f32 ) ;
299+ self . append_point ( 569_f32 , 200_f32 ) ;
300+ self . append_point ( 353_f32 , 206_f32 ) ;
301+ self . append_point ( 355_f32 , 350_f32 ) ;
302+ self . append_point ( 342_f32 , 488_f32 ) ;
303+
304+ self . add_line ( 10 , 6 , 4 ) ;
305+ self . add_line ( 7 , 1 , 5 ) ;
306+ self . add_line ( 3 , 9 , 4 ) ;
307+ self . add_line ( 11 , 6 , 4 ) ;
308+ self . add_line ( 3 , 11 , 6 ) ;
309+ self . add_line ( 5 , 2 , 20 ) ;
310+ self . add_line ( 7 , 4 , 3 ) ;
311+ self . add_line ( 11 , 7 , 3 ) ;
312+ self . add_line ( 8 , 4 , 3 ) ;
313+ self . add_line ( 10 , 7 , 3 ) ;
314+ self . add_line ( 3 , 10 , 5 ) ;
315+ self . add_line ( 4 , 0 , 1 ) ;
316+ self . add_line ( 8 , 0 , 5 ) ;
317+ self . add_line ( 9 , 8 , 4 ) ;
318+ self . add_line ( 6 , 5 , 7 ) ;
319+ self . add_line ( 4 , 1 , 2 ) ;
419320 }
420321
322+ /// Replaces the current graph with a large one
421323 pub fn insert_large_graph ( & mut self )
422324 {
423325 self . clear ( ) ;
424326
425- self . add_point ( 1 , 595_f32 , 640_f32 ) ;
426- self . add_point ( 2 , 864_f32 , 300_f32 ) ;
427- self . add_point ( 3 , 550_f32 , 369_f32 ) ;
428- self . add_point ( 4 , 280_f32 , 606_f32 ) ;
429- self . add_point ( 5 , 748_f32 , 127_f32 ) ;
430- self . add_point ( 6 , 177_f32 , 71_f32 ) ;
431- self . add_point ( 7 , 467_f32 , 84_f32 ) ;
432- self . add_point ( 8 , 260_f32 , 431_f32 ) ;
433- self . add_point ( 9 , 928_f32 , 642_f32 ) ;
434- self . add_point ( 10 , 466_f32 , 181_f32 ) ;
435- self . add_point ( 11 , 433_f32 , 27_f32 ) ;
436- self . add_point ( 12 , 667_f32 , 52_f32 ) ;
437- self . add_point ( 13 , 847_f32 , 75_f32 ) ;
438- self . add_point ( 14 , 734_f32 , 270_f32 ) ;
439- self . add_point ( 15 , 931_f32 , 233_f32 ) ;
440- self . add_point ( 16 , 904_f32 , 389_f32 ) ;
441- self . add_point ( 17 , 423_f32 , 467_f32 ) ;
442- self . add_point ( 18 , 445_f32 , 551_f32 ) ;
443- self . add_point ( 19 , 691_f32 , 559_f32 ) ;
444-
445- self . add_line ( 12 , 13 , 1 ) ;
446- self . add_line ( 6 , 8 , 12 ) ;
447- self . add_line ( 14 , 3 , 1 ) ;
448- self . add_line ( 16 , 9 , 10 ) ;
449- self . add_line ( 15 , 9 , 14 ) ;
450- self . add_line ( 2 , 19 , 9 ) ;
451- self . add_line ( 18 , 19 , 3 ) ;
452- self . add_line ( 17 , 18 , 2 ) ;
453- self . add_line ( 8 , 4 , 1 ) ;
454- self . add_line ( 1 , 9 , 1 ) ;
455- self . add_line ( 7 , 5 , 1 ) ;
456- self . add_line ( 16 , 3 , 2 ) ;
457- self . add_line ( 3 , 8 , 1 ) ;
458- self . add_line ( 3 , 17 , 3 ) ;
459- self . add_line ( 15 , 16 , 1 ) ;
460- self . add_line ( 5 , 14 , 3 ) ;
461- self . add_line ( 10 , 3 , 8 ) ;
462- self . add_line ( 13 , 2 , 2 ) ;
463- self . add_line ( 12 , 5 , 2 ) ;
327+ self . append_point ( 595_f32 , 640_f32 ) ;
328+ self . append_point ( 864_f32 , 300_f32 ) ;
329+ self . append_point ( 550_f32 , 369_f32 ) ;
330+ self . append_point ( 280_f32 , 606_f32 ) ;
331+ self . append_point ( 748_f32 , 127_f32 ) ;
332+ self . append_point ( 177_f32 , 71_f32 ) ;
333+ self . append_point ( 467_f32 , 84_f32 ) ;
334+ self . append_point ( 260_f32 , 431_f32 ) ;
335+ self . append_point ( 928_f32 , 642_f32 ) ;
336+ self . append_point ( 466_f32 , 181_f32 ) ;
337+ self . append_point ( 433_f32 , 27_f32 ) ;
338+ self . append_point ( 667_f32 , 52_f32 ) ;
339+ self . append_point ( 847_f32 , 75_f32 ) ;
340+ self . append_point ( 734_f32 , 270_f32 ) ;
341+ self . append_point ( 931_f32 , 233_f32 ) ;
342+ self . append_point ( 904_f32 , 389_f32 ) ;
343+ self . append_point ( 423_f32 , 467_f32 ) ;
344+ self . append_point ( 445_f32 , 551_f32 ) ;
345+ self . append_point ( 691_f32 , 559_f32 ) ;
346+
464347 self . add_line ( 11 , 12 , 1 ) ;
465- self . add_line ( 6 , 11 , 2 ) ;
466- self . add_line ( 10 , 5 , 3 ) ;
467- self . add_line ( 5 , 2 , 1 ) ;
468- self . add_line ( 16 , 17 , 5 ) ;
469- self . add_line ( 6 , 7 , 1 ) ;
470- self . add_line ( 18 , 1 , 1 ) ;
471- self . add_line ( 6 , 10 , 2 ) ;
472- self . add_line ( 2 , 3 , 1 ) ;
473- self . add_line ( 19 , 9 , 4 ) ;
474- self . add_line ( 17 , 4 , 2 ) ;
475- self . add_line ( 13 , 15 , 1 ) ;
348+ self . add_line ( 5 , 7 , 12 ) ;
349+ self . add_line ( 13 , 2 , 1 ) ;
350+ self . add_line ( 15 , 8 , 10 ) ;
351+ self . add_line ( 14 , 8 , 14 ) ;
352+ self . add_line ( 1 , 18 , 9 ) ;
353+ self . add_line ( 17 , 18 , 3 ) ;
354+ self . add_line ( 16 , 17 , 2 ) ;
355+ self . add_line ( 7 , 3 , 1 ) ;
356+ self . add_line ( 0 , 8 , 1 ) ;
357+ self . add_line ( 6 , 4 , 1 ) ;
358+ self . add_line ( 15 , 2 , 2 ) ;
359+ self . add_line ( 2 , 7 , 1 ) ;
360+ self . add_line ( 2 , 16 , 3 ) ;
361+ self . add_line ( 14 , 15 , 1 ) ;
362+ self . add_line ( 4 , 13 , 3 ) ;
363+ self . add_line ( 9 , 2 , 8 ) ;
364+ self . add_line ( 12 , 1 , 2 ) ;
365+ self . add_line ( 11 , 4 , 2 ) ;
366+ self . add_line ( 10 , 11 , 1 ) ;
367+ self . add_line ( 5 , 10 , 2 ) ;
368+ self . add_line ( 9 , 4 , 3 ) ;
476369 self . add_line ( 4 , 1 , 1 ) ;
370+ self . add_line ( 15 , 16 , 5 ) ;
371+ self . add_line ( 5 , 6 , 1 ) ;
372+ self . add_line ( 17 , 0 , 1 ) ;
373+ self . add_line ( 5 , 9 , 2 ) ;
374+ self . add_line ( 1 , 2 , 1 ) ;
375+ self . add_line ( 18 , 8 , 4 ) ;
376+ self . add_line ( 16 , 3 , 2 ) ;
377+ self . add_line ( 12 , 14 , 1 ) ;
378+ self . add_line ( 3 , 0 , 1 ) ;
477379 }
478380}
479381
0 commit comments