static void Main(string[] args) { int N, M, a, b; string c; string[] c2 = new string[2]; Console.Write("N = "); N = Convert.ToInt32(Console.ReadLine()); Console.Write("M = "); M = Convert.ToInt32(Console.ReadLine()); Graf g = new Graf(N + 1); for (int i = 0; i < M; i++) { Console.Write((i + 1) + "-a linia: "); c = Console.ReadLine(); c2 = c.Split(' '); a = Convert.ToInt32(c2[0]); b = Convert.ToInt32(c2[1]); if (a > N || b > N) { Console.WriteLine("Neisnuye stantsiy dlya linii #" + a + " - #" + b); break; } g.addRebro(a, b); } g.DFS(1); Console.ReadKey(); }
public void TopologicalTest3() { var graf = new Graf<char>(); var mVertex = new Vertex<char>('m'); var nVertex = new Vertex<char>('n'); var oVertex = new Vertex<char>('o'); var pVertex = new Vertex<char>('p'); var qVertex = new Vertex<char>('q'); var rVertex = new Vertex<char>('r'); var sVertex = new Vertex<char>('s'); var tVertex = new Vertex<char>('t'); var uVertex = new Vertex<char>('u'); var vVertex = new Vertex<char>('v'); var wVertex = new Vertex<char>('w'); var xVertex = new Vertex<char>('x'); var yVertex = new Vertex<char>('y'); var zVertex = new Vertex<char>('z'); mVertex.AddDirectedEdge(1, qVertex); mVertex.AddDirectedEdge(1, rVertex); mVertex.AddDirectedEdge(1, xVertex); nVertex.AddDirectedEdge(1, qVertex); nVertex.AddDirectedEdge(1, uVertex); nVertex.AddDirectedEdge(1, oVertex); oVertex.AddDirectedEdge(1, rVertex); oVertex.AddDirectedEdge(1, sVertex); pVertex.AddDirectedEdge(1, oVertex); pVertex.AddDirectedEdge(1, sVertex); pVertex.AddDirectedEdge(1, zVertex); qVertex.AddDirectedEdge(1, tVertex); rVertex.AddDirectedEdge(1, uVertex); rVertex.AddDirectedEdge(1, yVertex); sVertex.AddDirectedEdge(1, rVertex); uVertex.AddDirectedEdge(1, tVertex); vVertex.AddDirectedEdge(1, wVertex); vVertex.AddDirectedEdge(1, xVertex); wVertex.AddDirectedEdge(1, zVertex); yVertex.AddDirectedEdge(1, vVertex); graf.AddVertex(mVertex); graf.AddVertex(nVertex); graf.AddVertex(oVertex); graf.AddVertex(pVertex); graf.AddVertex(qVertex); graf.AddVertex(rVertex); graf.AddVertex(sVertex); graf.AddVertex(tVertex); graf.AddVertex(uVertex); graf.AddVertex(vVertex); graf.AddVertex(wVertex); graf.AddVertex(xVertex); graf.AddVertex(yVertex); graf.AddVertex(zVertex); graf.DFS(); var topologicalSort = graf.GetTopologicalSort().ToList(); Assert.NotNull(topologicalSort); Assert.Equal(14, topologicalSort.Count); Assert.Equal('p', topologicalSort.First().Key); Assert.Equal(27, topologicalSort.First().DiscoveryTime); Assert.Equal(28, topologicalSort.First().FinishingTime); Assert.Equal('t', topologicalSort.Last().Key); Assert.Equal(3, topologicalSort.Last().DiscoveryTime); Assert.Equal(4, topologicalSort.Last().FinishingTime); var grafT = graf.GetGrafT(); var components = grafT.GetStronglyConnectedComponents(topologicalSort); Assert.Equal(14, components.Count); }
public void TopologicalTest1() { var graf = new Graf<char>(); var qVertex = new Vertex<char>('q'); var rVertex = new Vertex<char>('r'); var sVertex = new Vertex<char>('s'); var tVertex = new Vertex<char>('t'); var uVertex = new Vertex<char>('u'); var vVertex = new Vertex<char>('v'); var wVertex = new Vertex<char>('w'); var xVertex = new Vertex<char>('x'); var yVertex = new Vertex<char>('y'); var zVertex = new Vertex<char>('z'); qVertex.AddDirectedEdge(1, sVertex); qVertex.AddDirectedEdge(1, tVertex); qVertex.AddDirectedEdge(1, wVertex); sVertex.AddDirectedEdge(1, vVertex); vVertex.AddDirectedEdge(1, wVertex); wVertex.AddDirectedEdge(1, sVertex); tVertex.AddDirectedEdge(1, xVertex); tVertex.AddDirectedEdge(1, yVertex); xVertex.AddDirectedEdge(1, zVertex); yVertex.AddDirectedEdge(1, qVertex); rVertex.AddDirectedEdge(1, uVertex); rVertex.AddDirectedEdge(1, yVertex); uVertex.AddDirectedEdge(1, yVertex); graf.AddVertex(qVertex); graf.AddVertex(rVertex); graf.AddVertex(sVertex); graf.AddVertex(tVertex); graf.AddVertex(uVertex); graf.AddVertex(vVertex); graf.AddVertex(wVertex); graf.AddVertex(xVertex); graf.AddVertex(yVertex); graf.AddVertex(zVertex); graf.DFS(); Assert.Null(graf.GetTopologicalSort()); }
public void DFSTest1() { var graf = new Graf<char>(); var qVertex = new Vertex<char>('q'); var rVertex = new Vertex<char>('r'); var sVertex = new Vertex<char>('s'); var tVertex = new Vertex<char>('t'); var uVertex = new Vertex<char>('u'); var vVertex = new Vertex<char>('v'); var wVertex = new Vertex<char>('w'); var xVertex = new Vertex<char>('x'); var yVertex = new Vertex<char>('y'); var zVertex = new Vertex<char>('z'); qVertex.AddDirectedEdge(1, sVertex); qVertex.AddDirectedEdge(1, tVertex); qVertex.AddDirectedEdge(1, wVertex); sVertex.AddDirectedEdge(1, vVertex); vVertex.AddDirectedEdge(1, wVertex); wVertex.AddDirectedEdge(1, sVertex); tVertex.AddDirectedEdge(1, xVertex); tVertex.AddDirectedEdge(1, yVertex); xVertex.AddDirectedEdge(1, zVertex); yVertex.AddDirectedEdge(1, qVertex); rVertex.AddDirectedEdge(1, uVertex); rVertex.AddDirectedEdge(1, yVertex); uVertex.AddDirectedEdge(1, yVertex); graf.AddVertex(qVertex); graf.AddVertex(rVertex); graf.AddVertex(sVertex); graf.AddVertex(tVertex); graf.AddVertex(uVertex); graf.AddVertex(vVertex); graf.AddVertex(wVertex); graf.AddVertex(xVertex); graf.AddVertex(yVertex); graf.AddVertex(zVertex); graf.DFS(); Assert.Equal(1, qVertex.DiscoveryTime); Assert.Equal(16, qVertex.FinishingTime); Assert.Equal(17, rVertex.DiscoveryTime); Assert.Equal(20, rVertex.FinishingTime); Assert.Equal(2, sVertex.DiscoveryTime); Assert.Equal(7, sVertex.FinishingTime); Assert.Equal(8, tVertex.DiscoveryTime); Assert.Equal(15, tVertex.FinishingTime); Assert.Equal(18, uVertex.DiscoveryTime); Assert.Equal(19, uVertex.FinishingTime); Assert.Equal(3, vVertex.DiscoveryTime); Assert.Equal(6, vVertex.FinishingTime); Assert.Equal(4, wVertex.DiscoveryTime); Assert.Equal(5, wVertex.FinishingTime); Assert.Equal(9, xVertex.DiscoveryTime); Assert.Equal(12, xVertex.FinishingTime); Assert.Equal(13, yVertex.DiscoveryTime); Assert.Equal(14, yVertex.FinishingTime); Assert.Equal(10, zVertex.DiscoveryTime); Assert.Equal(11, zVertex.FinishingTime); }