mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-12-19 07:00:35 +08:00
121 lines
3.5 KiB
Java
121 lines
3.5 KiB
Java
package com.thealgorithms.dynamicprogramming;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
|
import com.thealgorithms.datastructures.graphs.UndirectedAdjacencyListGraph;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
class TreeMatchingTest {
|
|
UndirectedAdjacencyListGraph graph;
|
|
|
|
@BeforeEach
|
|
void setUp() {
|
|
graph = new UndirectedAdjacencyListGraph();
|
|
for (int i = 0; i < 14; i++) {
|
|
graph.addNode();
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void testMaxMatchingForGeneralTree() {
|
|
graph.addEdge(0, 1, 20);
|
|
graph.addEdge(0, 2, 30);
|
|
graph.addEdge(1, 3, 40);
|
|
graph.addEdge(1, 4, 10);
|
|
graph.addEdge(2, 5, 20);
|
|
graph.addEdge(3, 6, 30);
|
|
graph.addEdge(3, 7, 30);
|
|
graph.addEdge(5, 8, 40);
|
|
graph.addEdge(5, 9, 10);
|
|
|
|
TreeMatching treeMatching = new TreeMatching(graph);
|
|
assertEquals(110, treeMatching.getMaxMatching(0, -1));
|
|
}
|
|
|
|
@Test
|
|
void testMaxMatchingForBalancedTree() {
|
|
graph.addEdge(0, 1, 20);
|
|
graph.addEdge(0, 2, 30);
|
|
graph.addEdge(0, 3, 40);
|
|
graph.addEdge(1, 4, 10);
|
|
graph.addEdge(1, 5, 20);
|
|
graph.addEdge(2, 6, 20);
|
|
graph.addEdge(3, 7, 30);
|
|
graph.addEdge(5, 8, 10);
|
|
graph.addEdge(5, 9, 20);
|
|
graph.addEdge(7, 10, 10);
|
|
graph.addEdge(7, 11, 10);
|
|
graph.addEdge(7, 12, 5);
|
|
TreeMatching treeMatching = new TreeMatching(graph);
|
|
assertEquals(100, treeMatching.getMaxMatching(0, -1));
|
|
}
|
|
|
|
@Test
|
|
void testMaxMatchingForTreeWithVariedEdgeWeights() {
|
|
graph.addEdge(0, 1, 20);
|
|
graph.addEdge(0, 2, 30);
|
|
graph.addEdge(0, 3, 40);
|
|
graph.addEdge(0, 4, 50);
|
|
graph.addEdge(1, 5, 20);
|
|
graph.addEdge(2, 6, 20);
|
|
graph.addEdge(3, 7, 30);
|
|
graph.addEdge(5, 8, 10);
|
|
graph.addEdge(5, 9, 20);
|
|
graph.addEdge(7, 10, 10);
|
|
graph.addEdge(4, 11, 50);
|
|
graph.addEdge(4, 12, 20);
|
|
TreeMatching treeMatching = new TreeMatching(graph);
|
|
assertEquals(140, treeMatching.getMaxMatching(0, -1));
|
|
}
|
|
|
|
@Test
|
|
void emptyTree() {
|
|
TreeMatching treeMatching = new TreeMatching(graph);
|
|
assertEquals(0, treeMatching.getMaxMatching(0, -1));
|
|
}
|
|
|
|
@Test
|
|
void testSingleNodeTree() {
|
|
UndirectedAdjacencyListGraph singleNodeGraph = new UndirectedAdjacencyListGraph();
|
|
singleNodeGraph.addNode();
|
|
|
|
TreeMatching treeMatching = new TreeMatching(singleNodeGraph);
|
|
assertEquals(0, treeMatching.getMaxMatching(0, -1));
|
|
}
|
|
|
|
@Test
|
|
void testLinearTree() {
|
|
graph.addEdge(0, 1, 10);
|
|
graph.addEdge(1, 2, 20);
|
|
graph.addEdge(2, 3, 30);
|
|
graph.addEdge(3, 4, 40);
|
|
|
|
TreeMatching treeMatching = new TreeMatching(graph);
|
|
assertEquals(60, treeMatching.getMaxMatching(0, -1));
|
|
}
|
|
|
|
@Test
|
|
void testStarShapedTree() {
|
|
graph.addEdge(0, 1, 15);
|
|
graph.addEdge(0, 2, 25);
|
|
graph.addEdge(0, 3, 35);
|
|
graph.addEdge(0, 4, 45);
|
|
|
|
TreeMatching treeMatching = new TreeMatching(graph);
|
|
assertEquals(45, treeMatching.getMaxMatching(0, -1));
|
|
}
|
|
|
|
@Test
|
|
void testUnbalancedTree() {
|
|
graph.addEdge(0, 1, 10);
|
|
graph.addEdge(0, 2, 20);
|
|
graph.addEdge(1, 3, 30);
|
|
graph.addEdge(2, 4, 40);
|
|
graph.addEdge(4, 5, 50);
|
|
|
|
TreeMatching treeMatching = new TreeMatching(graph);
|
|
assertEquals(100, treeMatching.getMaxMatching(0, -1));
|
|
}
|
|
}
|