public void drawHrana(Vrchol V1, Vrchol V2, Hrana E, int numberE) { if (E.v1 == E.v2) { gr.DrawArc(darkGoldPen, (V1.x - 2 * R), (V1.y - 2 * R), 2 * R, 2 * R, 90, 270); point = new PointF(V1.x - (int)(2.75 * R), V1.y - (int)(2.75 * R)); gr.DrawString(E.v3.ToString(), fo, br, point); drawVrchol(V1.x, V1.y, (E.v1 + 1).ToString()); } else { gr.DrawLine(darkGoldPen, V1.x, V1.y, V2.x, V2.y); point = new PointF((V1.x + V2.x) / 2, (V1.y + V2.y) / 2); gr.DrawString(E.v3.ToString(), fo, br, point); drawVrchol(V1.x, V1.y, (E.v1 + 1).ToString()); drawVrchol(V2.x, V2.y, (E.v2 + 1).ToString()); } }
//Minimalni kostry private void button2_Click(object sender, EventArgs e) { List <Hrana> Ed = new List <Hrana>(); foreach (Hrana s in E) { Ed.Add(s); } Hrana add = new Hrana(0, 0, int.MaxValue, true); for (int i = Ed.Count; i < V.Count; i++) { Ed.Add(add); } int[] nodes = new int[Ed.Count]; int posledni_n = selected1; listBoxMatrix.Items.Clear(); listBoxMatrix.Items.Add("Minimalni kostry:"); for (int i = 0; i < V.Count; i++) { nodes[i] = -1 - i; } var sVes = from h in Ed orderby h.v3 select h; foreach (var s in sVes) { for (int i = 0; i < Ed.Count; i++) { // pokud neprojdeme vsechny vrcholy int c = getColor(s.v2, nodes); if (getColor(s.v1, nodes) != c) { // Jestli hrana spojuje vrcholy ruznych barev - vkladame do zasobniku a prebarvime vrcholy nodes[selected1] = s.v2; listBoxMatrix.Items.Add((s.v1 + 1) + " " + (s.v2 + 1) + " (" + s.v3 + ")"); } } } selected1 = posledni_n; Ed.Clear(); }
//komponenta souvislosti private void button3_Click(object sender, EventArgs e) { int[] nodes = new int[V.Count]; int num = 0; listBoxMatrix.Items.Clear(); listBoxMatrix.Items.Add("Komponenty souvislosti:"); List <Hrana> Ed = new List <Hrana>(); foreach (Hrana s in E) //udelame vlatnosti hran { Hrana add = new Hrana(0, 0, 0, true); Ed.Add(s); if (!s.v4) { add.v1 = s.v2; // 1 --> 2 add.v2 = s.v1; // 2 --> 1 add.v3 = s.v3; // ochodnoceni add.v4 = s.v4; //boolean Ed.Add(add); } } for (int i = 0; i < V.Count; i++) //nastaveni cisla komponenty { nodes[i] = -1; } foreach (var ed in Ed) // hledame cislo komponenty { if (nodes[ed.v1] == -1 && nodes[ed.v2] == -1) { num++; } else if (nodes[ed.v1] > 0) { num = nodes[ed.v1]; } else { num = nodes[ed.v2]; } dfs(ed.v1, nodes, num, Ed); } int k = 0; k = nodes.Length; string[] l = new string[k]; for (int i = 0; i < k; i++) { if (nodes[i] < 0) { nodes[i] = 0; } l[nodes[i]] = ""; } for (int i = 0; i < k; i++) { l[nodes[i]] = l[nodes[i]] + (i + 1) + " "; } for (int i = 0; i < k; i++) //piseme do tabulky postupne vrcholy kazde komonenty { if ((i == 0) && (l[i] != null)) { for (int j = 0; j < l[i].Length / 2; j++) { listBoxMatrix.Items.Add(l[i].Split(' ')[j]); } } else if (l[i] != null) { listBoxMatrix.Items.Add(l[i]); } } }