Загрузка данных


using System;
using System.Drawing;
using System.Windows.Forms;

namespace IP
{
    public partial class Form1 : Form
    {
        int n;

        public Form1()
        {
            InitializeComponent();
        }

        // СОЗДАТЬ / НАЙТИ
        private void button1_Click(object sender, EventArgs e)
        {
            n = (int)numericUpDown1.Value;

            if (n <= 0)
            {
                MessageBox.Show("Введите количество вершин > 0");
                return;
            }

            // если матрица не создана
            if (dataGridView1.ColumnCount != n)
            {
                dataGridView1.ColumnCount = n;
                dataGridView1.RowCount = n;

                for (int i = 0; i < n; i++)
                {
                    dataGridView1.Columns[i].HeaderText = (i + 1).ToString();
                    dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
                }

                for (int i = 0; i < n; i++)
                    for (int j = 0; j < n; j++)
                        dataGridView1[j, i].Value = 0;

                listBox1.Items.Clear();
                return;
            }

            // ПОИСК
            listBox1.Items.Clear();

            int count = 0;
            bool[] isolatedArr = new bool[n];

            for (int i = 0; i < n; i++)
            {
                bool isolated = true;

                for (int j = 0; j < n; j++)
                {
                    int row = Convert.ToInt32(dataGridView1[j, i].Value);
                    int col = Convert.ToInt32(dataGridView1[i, j].Value);

                    if (row != 0 || col != 0)
                    {
                        isolated = false;
                        break;
                    }
                }

                isolatedArr[i] = isolated;

                if (isolated)
                {
                    listBox1.Items.Add("Вершина № " + (i + 1));
                    count++;
                }
            }

            listBox1.Items.Add("----------------");
            listBox1.Items.Add("Количество: " + count);

            // РИСУЕМ ГРАФ
            DrawGraph(isolatedArr);
        }

        // ОЧИСТКА
        private void button2_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            listBox1.Items.Clear();
            pictureBox1.Image = null;
        }

        // ПРОВЕРКА ВВОДА
        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                int val = Convert.ToInt32(dataGridView1[e.ColumnIndex, e.RowIndex].Value);

                if (val != 0 && val != 1)
                {
                    MessageBox.Show("Можно вводить только 0 или 1");
                    dataGridView1[e.ColumnIndex, e.RowIndex].Value = 0;
                }
            }
            catch
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].Value = 0;
            }
        }

        // РИСОВАНИЕ ГРАФА
        private void DrawGraph(bool[] isolatedArr)
        {
            Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics g = Graphics.FromImage(bmp);

            g.Clear(Color.White);

            int radius = 20;
            PointF[] points = new PointF[n];

            float centerX = pictureBox1.Width / 2;
            float centerY = pictureBox1.Height / 2;
            float R = Math.Min(centerX, centerY) - 40;

            // размещение по кругу
            for (int i = 0; i < n; i++)
            {
                double angle = 2 * Math.PI * i / n;
                float x = centerX + (float)(R * Math.Cos(angle));
                float y = centerY + (float)(R * Math.Sin(angle));
                points[i] = new PointF(x, y);
            }

            Pen pen = new Pen(Color.Black, 2);

            // рисуем рёбра
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    int val = Convert.ToInt32(dataGridView1[j, i].Value);

                    if (val == 1)
                    {
                        g.DrawLine(pen, points[i], points[j]);
                    }
                }
            }

            // рисуем вершины
            for (int i = 0; i < n; i++)
            {
                Brush brush = isolatedArr[i] ? Brushes.Red : Brushes.LightBlue;

                g.FillEllipse(brush,
                    points[i].X - radius,
                    points[i].Y - radius,
                    radius * 2,
                    radius * 2);

                g.DrawEllipse(Pens.Black,
                    points[i].X - radius,
                    points[i].Y - radius,
                    radius * 2,
                    radius * 2);

                g.DrawString((i + 1).ToString(),
                    this.Font,
                    Brushes.Black,
                    points[i].X - 5,
                    points[i].Y - 8);
            }

            pictureBox1.Image = bmp;
        }

        // ПУСТЫЕ (не трогаем)
        private void Form1_Load(object sender, EventArgs e) { }
        private void label2_Click(object sender, EventArgs e) { }
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { }
        private void справкаToolStripMenuItem_Click(object sender, EventArgs e) { }
        private void groupBox4_Enter(object sender, EventArgs e) { }
        private void помощьToolStripMenuItem_Click(object sender, EventArgs e) { }
        private void groupBox1_Enter(object sender, EventArgs e) { }
        private void numericUpDown1_ValueChanged(object sender, EventArgs e) { }
        private void pictureBox1_Click(object sender, EventArgs e) { }
        private void groupBox2_Enter(object sender, EventArgs e) { }
        private void groupBox3_Enter(object sender, EventArgs e) { }
    }
}