Загрузка данных
using System;
using System.Windows.Forms;
namespace IP
{
public partial class Form1 : Form
{
int n;
int[,] matrix;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
numericUpDown1.Minimum = 1;
numericUpDown1.Maximum = 15;
numericUpDown1.Value = 5;
}
// СОЗДАТЬ МАТРИЦУ
private void button1_Click(object sender, EventArgs e)
{
n = (int)numericUpDown1.Value;
dataGridView1.RowCount = n;
dataGridView1.ColumnCount = n;
matrix = new int[n, n];
for (int i = 0; i < n; i++)
{
dataGridView1.Columns[i].HeaderText = (i + 1).ToString();
dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
}
listBox1.Items.Clear();
}
// ЗАПОЛНЕНИЕ (симметричный граф)
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (matrix == null)
{
MessageBox.Show("Сначала нажми 'Создать'");
return;
}
Random rnd = new Random();
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
if (i == j)
{
matrix[i, j] = 0;
}
else
{
int val = rnd.Next(0, 2);
matrix[i, j] = val;
matrix[j, i] = val;
}
}
}
// вывод в таблицу
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
dataGridView1.Rows[i].Cells[j].Value = matrix[i, j];
}
// ОЧИСТИТЬ
private void button2_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
listBox1.Items.Clear();
matrix = null;
}
// РЕЗУЛЬТАТ (степени + связность)
private void groupBox3_Enter(object sender, EventArgs e)
{
if (!ReadMatrix())
return;
listBox1.Items.Clear();
// степени вершин
for (int i = 0; i < n; i++)
{
int sum = 0;
for (int j = 0; j < n; j++)
sum += matrix[i, j];
listBox1.Items.Add($"Вершина {i + 1}: степень = {sum}");
}
// проверка связности
bool[] visited = new bool[n];
DFS(0, visited);
bool connected = true;
for (int i = 0; i < n; i++)
if (!visited[i])
connected = false;
listBox1.Items.Add("------------------");
listBox1.Items.Add(connected ? "Граф связный" : "Граф НЕ связный");
}
// ЧТЕНИЕ + ПРОВЕРКА ОШИБОК
private bool ReadMatrix()
{
if (dataGridView1.RowCount == 0)
{
MessageBox.Show("Матрица не создана");
return false;
}
try
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (dataGridView1.Rows[i].Cells[j].Value == null)
{
MessageBox.Show("Заполни все ячейки");
return false;
}
int val = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
if (val != 0 && val != 1)
{
MessageBox.Show("Только 0 или 1!");
return false;
}
matrix[i, j] = val;
}
}
}
catch
{
MessageBox.Show("Ошибка ввода!");
return false;
}
return true;
}
// DFS (поиск в глубину)
private void DFS(int v, bool[] visited)
{
visited[v] = true;
for (int i = 0; i < n; i++)
{
if (matrix[v, i] == 1 && !visited[i])
DFS(i, visited);
}
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
n = (int)numericUpDown1.Value;
}
// пустые обработчики
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 pictureBox1_Click(object sender, EventArgs e) { }
private void groupBox2_Enter(object sender, EventArgs e) { }
}
}