// graph transposition protected List <TreeNodeModel <int, int> > TransposeGraph(List <TreeNodeModel <int, int> > graph) { var result = new List <TreeNodeModel <int, int> >(); graph.ForEach(treeNode => { treeNode.Neighbours.ForEach(neighbour => { var newElement = new TreeNeighbourNode <int, int> { Name = treeNode.Name }; if (!result.Any(x => x.Name == neighbour.Name)) { var neighbourList = new List <TreeNeighbourNode <int, int> >() { newElement }; result.Add(new TreeNodeModel <int, int>(neighbour.Name, neighbourList)); } else { result.Where(x => x.Name == neighbour.Name).FirstOrDefault() .Neighbours .Add(newElement); } }); }); return(result); }
private async void KruskalStartBtn_Click(object sender, EventArgs e) { var someException = false; var tree = new List <TreeNodeModel <int, int> >(); var fileName = KruskalSourceFileTb.Text; if (string.IsNullOrEmpty(fileName)) { MessageBox.Show("Brak pliku z którego mam pobrać dane"); return; } try { var lines = File.ReadAllLines(fileName); for (int iLines = 0; iLines < lines.Length; iLines++) { var values = lines[iLines].Split(';'); var node = Int32.Parse(values[0]); var list = new List <TreeNeighbourNode <int, int> >(); for (int jValues = 1; jValues < values.Length;) { var treeNeighourNode = new TreeNeighbourNode <int, int> { Name = Int32.Parse(values[jValues++]), Weight = Int32.Parse(values[jValues++]) }; list.Add(treeNeighourNode); } var treeNodeModel = new TreeNodeModel <int, int>(node, list); tree.Add(treeNodeModel); } } catch (Exception ex) { var content = ex.Message; content += "\nLinia w pliku powinna zawierać dane:\nWierzhołek;Sasiad;Waga;Sasiad;Waga;Sasiad;Waga;..."; MessageBox.Show(content); someException = true; } if (!someException) { await StartAlgorithm(new KruskalProblem(tree)); } KruskalSourceFileTb.Text = ""; }
protected void CreateDFSGraph(out List <GraphEdge> dfsGraphEdges, out List <TreeNodeModel <int, int> > dfsGraph) { dfsGraphEdges = _edges.Where(edge => edge.IsVisited).ToList(); var graph = new List <TreeNodeModel <int, int> >(); dfsGraphEdges.ForEach(dfsGraphEdge => { var neighbour1 = new TreeNeighbourNode <int, int> { Name = dfsGraphEdge.Node2 }; var neighbour2 = new TreeNeighbourNode <int, int> { Name = dfsGraphEdge.Node1 }; var dfsGraphNode = graph.Where(x => x.Name == dfsGraphEdge.Node1).FirstOrDefault(); if (dfsGraphNode == null) { var neighbours = new List <TreeNeighbourNode <int, int> > { neighbour1 }; var treeNode = new TreeNodeModel <int, int>(dfsGraphEdge.Node1, neighbours); graph.Add(treeNode); } else { dfsGraphNode.Neighbours.Add(neighbour1); } dfsGraphNode = graph.Where(x => x.Name == dfsGraphEdge.Node2).FirstOrDefault(); if (dfsGraphNode == null) { var neighbours = new List <TreeNeighbourNode <int, int> > { neighbour2 }; var treeNode = new TreeNodeModel <int, int>(dfsGraphEdge.Node2, neighbours); graph.Add(treeNode); } else { dfsGraphNode.Neighbours.Add(neighbour2); } }); dfsGraph = graph; }
private async void ArticulationStartBtn_Click(object sender, EventArgs e) { var someException = false; var tree = new List <TreeNodeModel <int, int> >(); var fileName = ArticulationSourceFileTb.Text; if (string.IsNullOrEmpty(fileName)) { MessageBox.Show("Brak pliku z którego mam pobrać dane"); return; } try { var lines = File.ReadAllLines(fileName); for (int iLines = 0; iLines < lines.Length; iLines++) { var values = lines[iLines].Split(';'); int nodeFrom, nodeTo; int weight = 0; Int32.TryParse(values[0], out nodeFrom); Int32.TryParse(values[1], out nodeTo); if (values.Length > 2) { Int32.TryParse(values[2], out weight); } var node = tree.Where(x => x.Name == nodeFrom).FirstOrDefault(); var neighbour = new TreeNeighbourNode <int, int> { Name = nodeTo, Weight = weight }; if (node == null) { var neighbours = new List <TreeNeighbourNode <int, int> >(); neighbours.Add(neighbour); tree.Add(new TreeNodeModel <int, int>(nodeFrom, neighbours)); } else { node.Neighbours.Add(neighbour); } } } catch (Exception ex) { var content = ex.Message; content += "\nLinia w pliku powinna zawierać dane:\nWierzhołek;Wierzhołek;Waga (Waga opcjonalnie)"; MessageBox.Show(content); someException = true; } if (!someException) { await StartAlgorithm(new ArticulationBridgeProblem(tree)); } ArticulationSourceFileTb.Text = ""; }