Ejemplo n.º 1
0
        public void update_neighbor()
        {
            int sel = lb_vertex.SelectedIndex;

            if (sel != -1)
            {
                compV sV = compV.all_vertex[sel];
                tb_firewall.Text = sV.firewall.ToString();
                cb_neigbor.Items.Clear();
                lb_neigbor.Items.Clear();
                foreach (var a in compV.all_vertex)
                {
                    if (a != sV && !sV.isNeighbor(a))
                    {
                        cb_neigbor.Items.Add(a.ID);
                    }
                    else
                    if (a != sV)
                    {
                        lb_neigbor.Items.Add(a.ID);
                    }
                }
                if (cb_neigbor.Items.Count != 0)
                {
                    cb_neigbor.SelectedIndex = 0;
                }
            }
        }
Ejemplo n.º 2
0
        private void Button_Click_deleteOtherComp(object sender, RoutedEventArgs e)
        {
            int id1 = -1;

            try
            {
                id1 = int.Parse(tb_find_id.Text);
                if (!compV.used_id.Contains(id1))
                {
                    throw new Exception();
                }
            }
            catch
            {
                MessageBox.Show("Некорректно заданы поля");
                return;
            }
            compV        st         = compV.get_vertex(id1);
            List <compV> componenta = st.get_Componenta();

            for (int i = 0; i < compV.all_vertex.Count; i++)
            {
                if (!componenta.Contains(compV.all_vertex[i]))
                {
                    compV.all_vertex[i].remove_vertex();
                    i--;
                }
            }
            refresh();
            update_neighbor();
        }
Ejemplo n.º 3
0
        private void Button_Click_checkTwoID(object sender, RoutedEventArgs e)
        {
            int id1 = -1;
            int id2 = -1;

            try
            {
                id1 = int.Parse(tb_id1.Text);
                id2 = int.Parse(tb_id2.Text);
                if (id1 == id2 || !compV.used_id.Contains(id1) || !compV.used_id.Contains(id2))
                {
                    throw new Exception();
                }
            }
            catch
            {
                MessageBox.Show("Некорректно заданы поля", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            compV        st         = compV.get_vertex(id1);
            List <compV> componenta = st.get_Componenta();

            foreach (var a in componenta)
            {
                if (id2 == a.ID)
                {
                    MessageBox.Show("Вершины связанны между собой", "Результат работы", MessageBoxButton.OK);
                    return;
                }
            }
            MessageBox.Show("Вершины не связанны между собой", "Результат работы", MessageBoxButton.OK);
        }
        public static void remove_Edge(int ID1, int ID2)//удаление ребра при помощи двух ID
        {
            compV v1 = get_vertex(ID1);
            compV v2 = get_vertex(ID2);

            remove_Edge(v1, v2);
        }
 public void AddEdge(compV vertex)//добавить ребро
 {
     if (!lst_neighbor.Contains(vertex))
     {
         lst_neighbor.Add(vertex);
         vertex.lst_neighbor.Add(this);
     }
 }
 public static void AddEdge_byID(int ID1, int ID2)//добавление ребра при помощи двух ID
 {
     if (ID1 != ID2)
     {
         compV v1 = get_vertex(ID1);
         compV v2 = get_vertex(ID2);
         v1.AddEdge(v2);
     }
 }
 public bool isNeighbor(compV t)//является ли соседом через вершину
 {
     if (lst_neighbor.Contains(t))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Ejemplo n.º 8
0
        private void Button_Click_addneighbor(object sender, RoutedEventArgs e)
        {
            int sel = lb_vertex.SelectedIndex;

            if (sel != -1 && cb_neigbor.Items.Count > 0)
            {
                compV sV  = compV.all_vertex[sel];
                int   id2 = int.Parse(cb_neigbor.SelectedItem.ToString());
                compV.AddEdge_byID(sV.ID, id2);
                update_neighbor();
            }
        }
Ejemplo n.º 9
0
        private void Button_Click_deletevertex(object sender, RoutedEventArgs e)
        {
            int sel = lb_vertex.SelectedIndex;

            if (sel != -1)
            {
                compV sV = compV.all_vertex[sel];
                sV.remove_vertex();
            }
            refresh();
            update_neighbor();
        }
Ejemplo n.º 10
0
        private void Button_Click_deleteneighbor(object sender, RoutedEventArgs e)
        {
            int sel = lb_vertex.SelectedIndex;

            if (sel != -1 && lb_neigbor.SelectedIndex != -1)
            {
                compV sV  = compV.all_vertex[sel];
                int   id2 = int.Parse(lb_neigbor.SelectedItem.ToString());
                compV.remove_Edge(sV.ID, id2);
                update_neighbor();
            }
        }
Ejemplo n.º 11
0
        public bool isNeighbor(int ID1)//является ли соседом через ID
        {
            compV t = get_vertex(ID1);

            if (lst_neighbor.Contains(t))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 12
0
        public static List <compV> get_Componenta(compV v) //найти компоненту связности для произвольной вершины
        {
            List <compV> lst  = new List <compV>();        //те вершины которые будут искать соседей
            List <compV> used = new List <compV>();        //использованные вершины

            lst.Add(v);
            while (lst.Count != 0)
            {
                compV t = lst[0];
                used.Add(t);
                lst.Remove(t);
                foreach (var a in t.lst_neighbor)
                {
                    if (!used.Contains(a) && !lst.Contains(a))
                    {
                        lst.Add(a);
                    }
                }
            }
            return(used);
        }
Ejemplo n.º 13
0
        private void Button_Click_countComp(object sender, RoutedEventArgs e)
        {
            int id1 = -1;

            try
            {
                id1 = int.Parse(tb_find_id.Text);
                if (!compV.used_id.Contains(id1))
                {
                    throw new Exception();
                }
            }
            catch
            {
                MessageBox.Show("Некорректно заданы поля", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            compV        st         = compV.get_vertex(id1);
            List <compV> componenta = st.get_Componenta();

            tb_count_comp.Text = componenta.Count.ToString();
        }
Ejemplo n.º 14
0
        private void Button_Click_start(object sender, RoutedEventArgs e)
        {
            if (cb_start_vertex.SelectedIndex == -1)
            {
                return;
            }
            log_box.Clear();
            compV        start      = compV.get_vertex(int.Parse(cb_start_vertex.SelectedItem.ToString()));
            List <compV> componenta = start.get_Componenta();

            if (componenta.Count != compV.all_vertex.Count)
            {
                MessageBox.Show("Граф не связен.", "Внимание!");
                return;
            }
            int count_algs     = 0;
            int max_count_step = 0;

            try
            {
                count_algs     = int.Parse(tb_count_algs.Text);
                max_count_step = int.Parse(tb_count_step.Text);
                if (count_algs < 0 || max_count_step < 0)
                {
                    MessageBox.Show("Некорретно задано поле.", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
            catch
            {
                MessageBox.Show("Некорретно задано поле.", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            List <compV> botnet      = new List <compV>();
            int          total_step  = 0;
            int          botnet_fail = 0;

            for (int k = 0; k < count_algs; k++)
            {
                compV.refreshGraph();
                botnet.Clear();
                botnet.Add(start);
                start.status = true;
                int step  = 1;
                int count = 1;
                log_box.Text += (k + 1) + "  PASS" + "\r\n\r\n";
                log_box.Text += "Start vertex = " + start.ID + "\r\n";
                while (botnet.Count != compV.all_vertex.Count && max_count_step > step)
                {
                    log_box.Text += "Step " + step + ":\r\n";
                    count         = 0;
                    int c = botnet.Count;
                    for (int i = 0; i < c; i++)
                    {
                        List <compV> atLst = botnet[i].attack();
                        foreach (var j in atLst)
                        {
                            log_box.Text += (botnet[i].ID + " -> " + j.ID + " ");
                            j.status      = true;
                            botnet.Add(j);
                            count++;
                        }
                    }
                    if (count != 0)
                    {
                        log_box.Text += "\r\nbotnet count = " + botnet.Count + " new= " + count + "\r\n";
                    }
                    step++;
                }
                log_box.Text += "\r\n\r\n________________________________________________________________\r\n\r\n";
                if (max_count_step == step)
                {
                    botnet_fail++;
                }
                total_step += step;
            }
            tb_botnet_fail.Text = "Успешных защит = " + botnet_fail;
            tb_sred_step.Text   = "Среднее количество шагов = " + (float)total_step / count_algs;
            cb_numAlg.Items.Clear();
            for (int i = 0; i < count_algs; ++i)
            {
                cb_numAlg.Items.Add(i + 1);
            }
            if (cb_start_vertex.Items.Count != 0)
            {
                cb_numAlg.SelectedIndex = 0;
            }
        }
Ejemplo n.º 15
0
 public static void remove_Edge(compV v1, compV v2)//удаление ребра при помощи двух вершин
 {
     v1.lst_neighbor.Remove(v2);
     v2.lst_neighbor.Remove(v1);
 }