public void Root() { var gb = new WIntGraphBuilder(4, false); gb.Add(0, 1, 1); gb.Add(0, 2, 1); gb.Add(1, 2, 1); gb.Add(0, 3, 5); var graph = gb.ToGraph(); graph.Prim().Should().Equal( (0, new WEdge <int>(1, 1)), (0, new WEdge <int>(2, 1)), (0, new WEdge <int>(3, 5))); graph.Prim(1).Should().Equal( (1, new WEdge <int>(0, 1)), (1, new WEdge <int>(2, 1)), (0, new WEdge <int>(3, 5))); graph.Prim(2).Should().Equal( (2, new WEdge <int>(0, 1)), (2, new WEdge <int>(1, 1)), (0, new WEdge <int>(3, 5))); graph.Prim(3).Should().Equal( (3, new WEdge <int>(0, 5)), (0, new WEdge <int>(1, 1)), (0, new WEdge <int>(2, 1))); }
public void 重み付きグラフ() { var gb = new WIntGraphBuilder(5, true); gb.Add(0, 1, 1); gb.Add(0, 2, 10); gb.Add(0, 3, 30); gb.Add(0, 4, 40); gb.Add(1, 2, 5); gb.Add(2, 3, 605); gb.Add(2, 4, 6); gb.Add(4, 3, 6); gb.Add(4, 0, 1); var graph = gb.ToGraph(); graph.ShortestPathBFS(0).Should().Equal(0u, 1u, 1u, 1u, 1u); graph.ShortestPathBFS(1).Should().Equal(3u, 0u, 1u, 2u, 2u); graph.ShortestPathBFS(2).Should().Equal(2u, 3u, 0u, 1u, 1u); graph.ShortestPathBFS(3).Should().Equal(4294967295u, 4294967295u, 4294967295u, 0u, 4294967295u); graph.ShortestPathBFS(4).Should().Equal(1u, 2u, 2u, 1u, 0u); graph.ShortestPathBFSReverse(0).Should().Equal(0u, 3u, 2u, 4294967295u, 1u); graph.ShortestPathBFSReverse(1).Should().Equal(1u, 0u, 3u, 4294967295u, 2u); graph.ShortestPathBFSReverse(2).Should().Equal(1u, 1u, 0u, 4294967295u, 2u); graph.ShortestPathBFSReverse(3).Should().Equal(1u, 2u, 1u, 0u, 1u); graph.ShortestPathBFSReverse(4).Should().Equal(1u, 2u, 1u, 4294967295u, 0u); }
public void 重み付きグラフ() { var gb = new WIntGraphBuilder(8, true); gb.Add(0, 1, 1); gb.Add(1, 2, 2); gb.Add(2, 3, 3); gb.Add(3, 4, 4); gb.Add(4, 5, 5); gb.Add(5, 6, 6); gb.Add(6, 2, 7); gb.Add(2, 4, 8); gb.Add(4, 7, 9); gb.Add(7, 0, 10); var(from, edges) = gb.ToGraph().EulerianTrail(); from.Should().Be(0); edges.Should().Equal(new WEdge <int>[] { new WEdge <int>(1, 1), new WEdge <int>(2, 2), new WEdge <int>(3, 3), new WEdge <int>(4, 4), new WEdge <int>(5, 5), new WEdge <int>(6, 6), new WEdge <int>(2, 7), new WEdge <int>(4, 8), new WEdge <int>(7, 9), new WEdge <int>(0, 10), }); }
public void 森の連結重み付き() { var gb = new WIntGraphBuilder(4, false); gb.Add(0, 2, 1); gb.Add(1, 3, 1); gb.Add(2, 3, 10); var graph = gb.ToGraph(); var res = graph.Kruskal(); res.Should().HaveCount(1); res[0].Should().Equal( (0, new WEdge <int>(2, 1)), (1, new WEdge <int>(3, 1)), (2, new WEdge <int>(3, 10))); }
public void 重み付きグラフ() { var gb = new WIntGraphBuilder(8, true); gb.Add(0, 1, 1); gb.Add(1, 2, 2); gb.Add(2, 3, 3); gb.Add(3, 4, 4); gb.Add(4, 5, 5); gb.Add(5, 6, 6); gb.Add(4, 7, 7); gb.Add(7, 3, 8); var(from, edges) = gb.ToGraph().GetCycleDFS(); from.Should().Be(3); edges.Should().Equal(new WEdge <int>[] { new WEdge <int>(4, 4), new WEdge <int>(7, 7), new WEdge <int>(3, 8), }); }
public void Int() { var gb = new WIntGraphBuilder(5, true); gb.Add(0, 1, 1); gb.Add(0, 2, 0); gb.Add(0, 3, 1); gb.Add(0, 4, 1); gb.Add(1, 2, 0); gb.Add(2, 3, 1); gb.Add(2, 4, 0); gb.Add(4, 3, 1); gb.Add(4, 0, 1); var graph = gb.ToGraph(); graph.ShortestPath01BFS(0).Should().Equal(new int[] { 0, 1, 0, 1, 0 }); graph.ShortestPath01BFS(1).Should().Equal(new int[] { 1, 0, 0, 1, 0 }); graph.ShortestPath01BFS(2).Should().Equal(new int[] { 1, 2, 0, 1, 0 }); graph.ShortestPath01BFS(3).Should().Equal(new int[] { int.MaxValue, int.MaxValue, int.MaxValue, 0, int.MaxValue }); graph.ShortestPath01BFS(4).Should().Equal(new int[] { 1, 2, 1, 1, 0 }); }
public void 重み付きグラフ() { var gb = new WIntGraphBuilder(5, false); gb.Add(0, 1, 1); gb.Add(0, 2, 10); gb.Add(0, 3, 30); gb.Add(0, 4, 40); gb.Add(1, 2, 5); gb.Add(2, 3, 605); gb.Add(2, 4, 6); gb.Add(4, 3, 6); gb.Add(4, 0, 1); var graph = gb.ToGraph(); graph.MinimumSpanningTreeBFS().Should().Equal( (0, new WEdge <int>(1, 1)), (0, new WEdge <int>(2, 10)), (0, new WEdge <int>(3, 30)), (0, new WEdge <int>(4, 40))); }
public void Int() { var gb = new WIntGraphBuilder(5, true); gb.Add(0, 1, 1); gb.Add(0, 2, 10); gb.Add(0, 3, 30); gb.Add(0, 4, 40); gb.Add(1, 2, 5); gb.Add(2, 3, 605); gb.Add(2, 4, 6); gb.Add(4, 3, 6); gb.Add(4, 0, 1); var res = gb.ToGraph().WarshallFloyd(); res[0].Should().Equal(new int[] { 0, 1, 6, 18, 12 }); res[1].Should().Equal(new int[] { 12, 0, 5, 17, 11 }); res[2].Should().Equal(new int[] { 7, 8, 0, 12, 6 }); res[3].Should().Equal(new int[] { 1073741823, 1073741823, 1073741823, 0, 1073741823 }); res[4].Should().Equal(new int[] { 1, 2, 7, 6, 0 }); }
public void Int() { var gb = new WIntGraphBuilder(5, false); gb.Add(0, 1, 1); gb.Add(0, 2, 10); gb.Add(0, 3, 30); gb.Add(0, 4, 40); gb.Add(1, 2, 5); gb.Add(2, 3, 605); gb.Add(2, 4, 6); gb.Add(4, 3, 6); gb.Add(4, 0, 1); var graph = gb.ToGraph(); graph.Prim().Should().Equal( (0, new WEdge <int>(1, 1)), (0, new WEdge <int>(4, 1)), (1, new WEdge <int>(2, 5)), (4, new WEdge <int>(3, 6))); }
public void 重み付きグラフ() { var gb = new WIntGraphBuilder(8, true); gb.Add(0, 1, 1); gb.Add(1, 2, 2); gb.Add(2, 3, 3); gb.Add(3, 4, 4); gb.Add(4, 5, 5); gb.Add(5, 6, 6); gb.Add(4, 7, 7); gb.Add(7, 3, 8); var scc = gb.ToGraph().Scc(); scc[0].Should().Equal(0); scc[1].Should().Equal(1); scc[2].Should().Equal(2); scc[3].Should().Equal(3, 4, 7); scc[4].Should().Equal(5); scc[5].Should().Equal(6); }
public void Int() { var gb = new WIntGraphBuilder(5, true); gb.Add(0, 1, 1); gb.Add(0, 2, 10); gb.Add(0, 3, 30); gb.Add(0, 4, 40); gb.Add(1, 2, 5); gb.Add(2, 3, 605); gb.Add(2, 4, 6); gb.Add(4, 3, 6); gb.Add(4, 0, 1); var graph = gb.ToGraph(); graph.BellmanFord(0).Should().Equal(new int[] { 0, 1, 6, 18, 12 }); graph.BellmanFord(1).Should().Equal(new int[] { 12, 0, 5, 17, 11 }); graph.BellmanFord(2).Should().Equal(new int[] { 7, 8, 0, 12, 6 }); graph.BellmanFord(3).Should().Equal(new int[] { 1073741823, 1073741823, 1073741823, 0, 1073741823 }); graph.BellmanFord(4).Should().Equal(new int[] { 1, 2, 7, 6, 0 }); }
public void Int() { var gb = new WIntGraphBuilder(5, true); gb.Add(0, 1, 1); gb.Add(0, 2, 10); gb.Add(0, 3, 30); gb.Add(0, 4, 40); gb.Add(1, 2, 5); gb.Add(2, 3, 605); gb.Add(2, 4, 6); gb.Add(4, 3, 6); gb.Add(4, 0, 1); var graph = gb.ToGraph(); graph.Dijkstra(0).Should().Equal(new int[] { 0, 1, 6, 18, 12 }); graph.Dijkstra(1).Should().Equal(new int[] { 12, 0, 5, 17, 11 }); graph.Dijkstra(2).Should().Equal(new int[] { 7, 8, 0, 12, 6 }); graph.Dijkstra(3).Should().Equal(new int[] { int.MaxValue, int.MaxValue, int.MaxValue, 0, int.MaxValue }); graph.Dijkstra(4).Should().Equal(new int[] { 1, 2, 7, 6, 0 }); }
public void Int() { var gb = new WIntGraphBuilder(5, false); gb.Add(0, 1, 1); gb.Add(0, 2, 10); gb.Add(0, 3, 30); gb.Add(0, 4, 40); gb.Add(1, 2, 5); gb.Add(2, 3, 605); gb.Add(2, 4, 6); gb.Add(4, 3, 6); gb.Add(4, 0, 1); var graph = gb.ToGraph(); var res = graph.Kruskal(); res.Should().HaveCount(1); res[0].Should().Equal( (0, new WEdge <int>(1, 1)), (0, new WEdge <int>(4, 1)), (1, new WEdge <int>(2, 5)), (4, new WEdge <int>(3, 6))); }
public void 連結ではない重み付き() { var gb = new WIntGraphBuilder(8, false); gb.Add(0, 1, 1); gb.Add(0, 2, 2); gb.Add(1, 2, 3); gb.Add(4, 3, 4); gb.Add(4, 7, 5); gb.Add(3, 7, 10); gb.Add(6, 5, 6); var graph = gb.ToGraph(); var res = graph.Kruskal(); res.Should().HaveCount(3); res[0].Should().Equal( (0, new WEdge <int>(1, 1)), (0, new WEdge <int>(2, 2))); res[1].Should().Equal( (3, new WEdge <int>(4, 4)), (4, new WEdge <int>(7, 5))); res[2].Should().Equal( (5, new WEdge <int>(6, 6))); }