aboutsummaryrefslogtreecommitdiff
path: root/src/com.example.portfolio3/com/example/portfolio3/AdjMapGraph.java
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-04-27 16:43:17 +0200
committerJonas Smedegaard <dr@jones.dk>2025-04-27 16:43:22 +0200
commit8535a9ca92539bf12ec00cac7a4e47be604f0283 (patch)
tree7a1fb082d5218e18a0186d97a8ed1f7dd87fd41f /src/com.example.portfolio3/com/example/portfolio3/AdjMapGraph.java
parentd104247b8bcdb2a38b680ac54e7ceb2bba155c0e (diff)
simplify path structure
Diffstat (limited to 'src/com.example.portfolio3/com/example/portfolio3/AdjMapGraph.java')
-rw-r--r--src/com.example.portfolio3/com/example/portfolio3/AdjMapGraph.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/com.example.portfolio3/com/example/portfolio3/AdjMapGraph.java b/src/com.example.portfolio3/com/example/portfolio3/AdjMapGraph.java
new file mode 100644
index 0000000..85e5d04
--- /dev/null
+++ b/src/com.example.portfolio3/com/example/portfolio3/AdjMapGraph.java
@@ -0,0 +1,45 @@
+package com.example.portfolio3;
+
+// origin: <https://moodle.ruc.dk/course/section.php?id=211877>
+
+import java.util.*;
+
+/// Adjecency Map Graph - A map from vertices to map of target vertex to edge
+class AdjMapGraph extends AbstractGraph {
+
+ /// foo
+ AdjMapGraph() {}
+
+ /// foo
+ private Map<Vertex, Map<Vertex, Edge>> outEdge = new HashMap<>();
+
+ /// foo
+ public void insertEdge(Vertex v1, Vertex v2, int w) {
+ Edge e = new Edge(v1,v2, w);
+ if (!outEdge.containsKey(e.from()))
+ outEdge.put(e.from(), new HashMap<Vertex, Edge>());
+ outEdge.get(e.from()).put(e.to(), e);
+ }
+
+ /// foo
+ public Collection<Edge> edges() {
+ Set<Edge> edges = new HashSet<>();
+ for (Vertex v : outEdge.keySet())
+ for (Vertex w : outEdge.get(v).keySet())
+ edges.add(outEdge.get(v).get(w));
+ return edges;
+ }
+
+ /// foo
+ public Collection<Edge> outEdge(Vertex v) {
+ return outEdge.get(v).values();
+ }
+
+ /// foo
+ public Integer getWeight(Vertex v1, Vertex v2) {
+ // constant time operation
+ if(!outEdge.containsKey(v1))return null;
+ if(!outEdge.get(v1).containsKey(v2))return null;
+ return outEdge.get(v1).get(v2).weight();
+ }
+}