private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = @"C:\"; openFileDialog1.Title = "Browse Input File"; openFileDialog1.CheckFileExists = true; openFileDialog1.CheckPathExists = true; openFileDialog1.DefaultExt = "txt"; openFileDialog1.Filter = "Text files (*.txt)|*.txt"; openFileDialog1.FilterIndex = 2; openFileDialog1.RestoreDirectory = true; openFileDialog1.ReadOnlyChecked = true; openFileDialog1.ShowReadOnly = true; if (openFileDialog1.ShowDialog().ToString().Equals("OK")) { textBox1.Text = openFileDialog1.FileName; } try { listBox1.Items.Clear(); using (StreamReader sr = new StreamReader(openFileDialog1.FileName)) { string line; List <string> g1vertex; while ((line = sr.ReadLine()) != null) { g1vertex = (line.Split('.').ToList <string>())[0].Split(',').ToList <string>(); foreach (string value in g1vertex) { string trimmedValue = value.Trim(); if (g1.GetVertexIndex(trimmedValue) == -1) { g1.AddVertex(trimmedValue); } } foreach (string value in g1vertex) { string trimmedValue = value.Trim(); if (trimmedValue != g1vertex[0]) { g1.AddEdge(trimmedValue, g1vertex[0]); } } } } g1.Display(); TopologicalSort ts = new TopologicalSort(g1); ts.BFS(); int i = 1; foreach (string value in ts.GetResult()) { listBox1.Items.Add("Semester " + i + ": " + value); i++; } } catch { textBox1.Text = "The file could not be read!"; } }
private void button2_Click(object sender, EventArgs e) { TopologicalSort ts = new TopologicalSort(g1); ts.DFS(); //create a form System.Windows.Forms.Form form = new System.Windows.Forms.Form(); //create a viewer object Microsoft.Msagl.GraphViewerGdi.GViewer viewer = new Microsoft.Msagl.GraphViewerGdi.GViewer(); //create a graph object Microsoft.Msagl.Drawing.Graph graph = new Microsoft.Msagl.Drawing.Graph("graph"); //create the graph content foreach (Graph.Vertex value in g1.GetVertices()) { graph.AddNode(value.data); } int i = 0; foreach (Graph.Vertex value1 in g1.GetVertices()) { int j = 0; foreach (Graph.Vertex value2 in g1.GetVertices()) { if (g1.getAdjMatrix()[value1.GetIndex(), value2.GetIndex()] == 1) { graph.AddEdge(g1.GetVertex(i).data, g1.GetVertex(j).data); } j++; } i++; } //bind the graph to the viewer viewer.Graph = graph; //associate the viewer with the form form.SuspendLayout(); viewer.Dock = System.Windows.Forms.DockStyle.Fill; form.Controls.Add(viewer); form.ResumeLayout(); //show the form form.ShowDialog(); //create the graph content using (StreamReader sr = new StreamReader("DFS.dat")) { string line; List <string> step; int count = 0; while ((line = sr.ReadLine()) != null) { step = line.Split(',').ToList <string>(); if (step[0] == "(") { Microsoft.Msagl.Drawing.Node c = graph.FindNode(step[1]); IEnumerable <Microsoft.Msagl.Drawing.Edge> edges = c.OutEdges; foreach (Microsoft.Msagl.Drawing.Edge edge in edges) { if (edge.TargetNode == graph.FindNode(step[2])) { edge.Attr.Color = Microsoft.Msagl.Drawing.Color.Red; } } } else if (step[0] == ">") { graph.FindNode(step[1]).Attr.FillColor = Microsoft.Msagl.Drawing.Color.PaleVioletRed; graph.FindNode(step[1]).LabelText += "/" + step[2].ToString() + ")"; } else if (step[0] == "==") { count++; graph.FindNode(step[1]).Attr.FillColor = Microsoft.Msagl.Drawing.Color.Aqua; graph.FindNode(step[1]).LabelText = count + ". " + graph.FindNode(step[1]).LabelText; } else { if (graph.FindNode(step[0]) != null) { graph.FindNode(step[0]).Attr.FillColor = Microsoft.Msagl.Drawing.Color.PaleGreen; graph.FindNode(step[0]).LabelText += " (" + step[1].ToString(); } } //bind the graph to the viewer viewer.Graph = graph; //associate the viewer with the form form.SuspendLayout(); viewer.Dock = System.Windows.Forms.DockStyle.Fill; form.Controls.Add(viewer); form.ResumeLayout(); //show the form form.ShowDialog(); } } }