Загрузка данных
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) { }
}
}