From ff91bbbfaeb9000197c615c822cf3040590912d6 Mon Sep 17 00:00:00 2001
From: Ian Valentin Christensen <valentianchristensen@gmail.com>
Date: Tue, 29 Apr 2025 13:18:29 +0200
Subject: add comments and avoid processing same pair of groups twice

---
 src/dk.biks.bachelorizer/dk/biks/bachelorizer/Graph.java | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

(limited to 'src/dk.biks.bachelorizer')

diff --git a/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Graph.java b/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Graph.java
index 8782569..ec4a35d 100644
--- a/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Graph.java
+++ b/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Graph.java
@@ -221,14 +221,15 @@ public final class Graph {
 		final ArrayList<Set<Vertex>> sets, final AbstractGraph g
 	) {
 		AbstractGraph h = new AdjListGraph();
-		Map<Set<Vertex>, String> label = new HashMap<>();
+		Map<Set<Vertex>, String> groupLabel = new HashMap<>();
 		for (Set<Vertex> groupSet : sets) {
-			// canonical string name - strings sortes alphabetically
+			// create a string for each group of module selections
 			String name = groupSet.stream()
 				.map(Vertex::toString)
 				.sorted() // avoid differently sorted duplicates
-				.collect(Collectors.joining(",", "{", "}"));
-			label.put(groupSet, name);
+				.collect(Collectors.joining(", ", "{", "}"));
+				// formatting of groups as vertices
+			groupLabel.put(groupSet, name); // map group to name of group
 		}
 
 		for (Set<Vertex> s: sets) {
@@ -236,6 +237,9 @@ public final class Graph {
 				if (t == s) {
 					continue;
 				}
+				if (s.hashCode() > t.hashCode()) {
+					continue; // process each pair no more than once
+				}
 				int sum = 0;
 				for (Vertex v: s) {
 					// students with this choice
@@ -248,7 +252,7 @@ public final class Graph {
 					}
 				}
 				h.insertEdge(
-					label.get(s), label.get(t), sum);
+					groupLabel.get(s), groupLabel.get(t), sum);
 			}
 		}
 
-- 
cgit v1.2.3