Skip to content

Commit bb22539

Browse files
committed
Done reworking graph and all tests
1 parent cc70b3c commit bb22539

4 files changed

Lines changed: 311 additions & 470 deletions

File tree

src/graph.rs

Lines changed: 105 additions & 203 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
1210
pub(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

Comments
 (0)