// Using adjacency matrix, a 2 dimensional array of boolean. // Second index is where the arrow is pointing to public ArrayList TopSortBFS(ArrayList sortedNode) { if (sortedNode.ToArray().GetLength(0) == adjMatx.GetLength(0) - 1) { int x; for (x = 0; x < adjMatx.GetLength(0); ++x) { if (!sortedNode.Contains(x)) { break; } } sortedNode.Add(x); message.Add("Remove " + nodename[x] + " from list\n"); img.Add(Graphviz.RenderImage(Utility.format2(adjMatx, sortedNode, nodename), "jpg")); return(sortedNode); } // Search a node that doesn't have an arrow pointing into them int i = 0, j = 0; bool found = false; while (j < adjMatx.GetLength(1)) { if (sortedNode.Contains(j)) { ++j; continue; } found = false; while (!found && i < adjMatx.GetLength(0)) { if (sortedNode.Contains(i)) { ++i; continue; } if (adjMatx[i, j]) { found = true; } ++i; } if (found) { ++j; continue; } break; } // remove the node sortedNode.Add(j); message.Add("Remove " + nodename[j] + " from list\n"); img.Add(Graphviz.RenderImage(Utility.format2(adjMatx, sortedNode, nodename), "jpg")); // reccursively call return(TopSortBFS(sortedNode)); }
private void button_bfs_Click(object sender, EventArgs e) { if (File.Exists(filename)) { treeView1.Nodes.Clear(); treeView1.Refresh(); richTextBox1.AppendText("Starting BFS Algorithm\n"); ts = new TSort(filename); ArrayList sortedNode = new ArrayList(); ts.img.Add(Graphviz.RenderImage(Utility.format2(ts.adjMatx, sortedNode, ts.nodename), "jpg")); sortedNode = ts.TopSortBFS(sortedNode); for (int i = 0; i < ts.message.ToArray().Length; i++) { pictureBox1.Image = ts.img[i + 1]; pictureBox1.Refresh(); richTextBox1.AppendText(ts.message[i]); richTextBox1.Refresh(); Thread.Sleep(500); } ts.status = true; next_button.Enabled = true; play_button.Enabled = true; pictureBox1.Image = ts.img[0]; richTextBox1.AppendText("Done!!\n"); List <List <int> > tes = ts.SemesterSort(sortedNode); for (int i = 0; i < tes.ToArray().Length; i++) { TreeNode[] listcourse = new TreeNode[tes[i].ToArray().Length]; for (int j = 0; j < tes[i].ToArray().Length; j++) { listcourse[j] = new TreeNode(ts.nodename[tes[i][j]]); } TreeNode sem = new TreeNode("Semester " + (i + 1).ToString(), listcourse); treeView1.Nodes.Add(sem); } } else { richTextBox1.AppendText("Error : File not Found!!\n"); } }
// Using adjacency matrix, a 2 dimensional array of boolean. // Second index is where the arrow is pointing to public ArrayList TopSortDFS(int x, ArrayList sortedNode) { c++; timestamp[x] += c.ToString() + " "; message.Add("Entering Node " + nodename[x] + "\n"); img.Add(Graphviz.RenderImage(Utility.format1(adjMatx, timestamp, nodename), "jpg")); // For every child, reccursively call the algorithm, if the child hasn't been sorted for (int j = 0; j < adjMatx.GetLength(1); ++j) { if (adjMatx[x, j] == true && !sortedNode.Contains(j)) { sortedNode = TopSortDFS(j, sortedNode); } } c++; timestamp[x] += c.ToString() + " "; message.Add("Leaving Node " + nodename[x] + "\n"); img.Add(Graphviz.RenderImage(Utility.format1(adjMatx, timestamp, nodename), "jpg")); // Insert it to the beginning of the list sortedNode.Insert(0, x); return(sortedNode); }
private void button_dfs_Click(object sender, EventArgs e) { if (File.Exists(filename)) { treeView1.Nodes.Clear(); treeView1.Refresh(); richTextBox1.AppendText("Starting DFS Algorithm\n"); ts = new TSort(filename); ArrayList sortedNode = new ArrayList(); ts.img.Add(Graphviz.RenderImage(Utility.format1(ts.adjMatx, ts.timestamp, ts.nodename), "jpg")); int i = 0, j = 0; bool found = false; while (j < ts.adjMatx.GetLength(1)) { if (sortedNode.Contains(j)) { ++j; continue; } found = false; while (!found && i < ts.adjMatx.GetLength(0)) { if (ts.adjMatx[i, j]) { found = true; } ++i; } if (found) { ++j; continue; } // Search the damn thing, starting from node j sortedNode = ts.TopSortDFS(j, sortedNode); ++j; } for (i = 0; i < ts.message.ToArray().Length; i++) { pictureBox1.Image = ts.img[i + 1]; pictureBox1.Refresh(); richTextBox1.AppendText(ts.message[i]); richTextBox1.Refresh(); Thread.Sleep(500); } ts.status = true; next_button.Enabled = true; play_button.Enabled = true; pictureBox1.Image = ts.img[0]; richTextBox1.AppendText("Done!!\n"); List <List <int> > tes = ts.SemesterSort(sortedNode); for (i = 0; i < tes.ToArray().Length; i++) { TreeNode[] listcourse = new TreeNode[tes[i].ToArray().Length]; for (j = 0; j < tes[i].ToArray().Length; j++) { listcourse[j] = new TreeNode(ts.nodename[tes[i][j]]); } TreeNode sem = new TreeNode("Semester " + (i + 1).ToString(), listcourse); treeView1.Nodes.Add(sem); } } else { richTextBox1.AppendText("Error : File not Found!!\n"); } }