コード例 #1
0
 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());
     }
 }
コード例 #2
0
        //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();
        }
コード例 #3
0
        //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]);
                }
            }
        }