дискретка_все_практики / дискретка / Раздел 1 Практика 1
.doc
5.
|
(12) |
(23) |
(24) |
(26) |
(35) |
(46) |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
1 |
1 |
1 |
1 |
0 |
0 |
3 |
0 |
1 |
0 |
0 |
1 |
0 |
4 |
0 |
0 |
1 |
0 |
0 |
1 |
5 |
0 |
0 |
0 |
0 |
1 |
0 |
6 |
0 |
0 |
0 |
1 |
0 |
1 |
6.
|
(15) |
(23) |
(26) |
(34) |
(35) |
(56) |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
1 |
1 |
0 |
0 |
0 |
3 |
0 |
1 |
0 |
1 |
1 |
0 |
4 |
0 |
0 |
0 |
1 |
0 |
0 |
5 |
1 |
0 |
0 |
0 |
1 |
1 |
6 |
0 |
0 |
1 |
0 |
0 |
1 |
7.
|
(12) |
(14) |
(23) |
(26) |
(35) |
(56) |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
2 |
1 |
0 |
1 |
1 |
0 |
0 |
3 |
0 |
0 |
1 |
0 |
1 |
0 |
4 |
0 |
1 |
0 |
0 |
0 |
0 |
5 |
0 |
0 |
0 |
0 |
1 |
1 |
6 |
0 |
0 |
0 |
1 |
0 |
1 |
8.
|
(16) |
(23) |
(24) |
(35) |
(36) |
(46) |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
1 |
1 |
0 |
0 |
0 |
3 |
0 |
1 |
0 |
1 |
1 |
0 |
4 |
0 |
0 |
1 |
0 |
0 |
1 |
5 |
0 |
0 |
0 |
1 |
0 |
0 |
6 |
1 |
0 |
0 |
0 |
1 |
1 |
9.
|
(13) |
(24) |
(35) |
(36) |
(45) |
(46) |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
1 |
0 |
0 |
0 |
0 |
3 |
1 |
0 |
1 |
1 |
0 |
0 |
4 |
0 |
1 |
0 |
0 |
1 |
1 |
5 |
0 |
0 |
1 |
0 |
1 |
0 |
6 |
0 |
0 |
0 |
1 |
0 |
1 |
10.
|
(13) |
(15) |
(24) |
(26) |
(45) |
(56) |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
2 |
0 |
0 |
1 |
1 |
0 |
0 |
3 |
1 |
0 |
0 |
0 |
0 |
0 |
4 |
0 |
0 |
1 |
0 |
1 |
0 |
5 |
0 |
1 |
0 |
0 |
1 |
1 |
6 |
0 |
0 |
0 |
1 |
0 |
1 |
4. МЕТОДИЧЕСКИЕ УКАЗАНИЯ
В работе можно использовать следующие фрагменты программ, представленные на языке C#.
//Случайное заполнение матрицы смежности
{Random x = new Random();
for (short i = 0; i < n; i++)
for (short j = 0; j < n; j++)
{
if (i != j)
{
dataGridView1[i, j].Value = x.Next(0, 2);
}
}
// Случайное построение графа
{
if (MessageBox.Show("Вы действительно хотите сбросить старые результаты?", "Подтверждение выбора", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
for (short i = 0; i < n; i++)
{
for (short j = 0; j < n; j++)
{
if (i != j)
{
dataGridView1[i, j].Value = null;
a[i, j] = 0;
a1[i, j] = 0;
}
}
}
koord.Clear();
n = 1;
numericUpDown1.Value = n;
pictureBox1.Invalidate();
}
// Для того чтобы сбросить старые результаты, можно использовать:
{
if (MessageBox.Show("Вы действительно хотите сбросить старые результаты?", "Подтверждение выбора", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
for (short i = 0; i < n; i++)
{
for (short j = 0; j < n; j++)
{
if (i != j)
{
dataGridView1[i, j].Value = null;
a[i, j] = 0;
a1[i, j] = 0;
}
}
}
koord.Clear();
n = 1;
numericUpDown1.Value = n;
pictureBox1.Invalidate();
}
}
// Можно использовать следующую часть программы для выведения матриц смежности и инцидентности
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
if (rect) return;
//вкючение новых вершин и дуг
int i; bool b=false;
if (kv <= 0&& !mcrest)
{//занести новую вершину в массив
A[kv].n = kv; A[kv].x = e.X; A[kv].y = e.Y; A[kv].r = rv; A[kv].e = true;
A[kv].c = Col[q]; A[kv].q = q;
kv++;
}else
{//найти вершину близкую к текущей точке
b = false;
for(i=0;i<kv;i++)
if ((e.X - A[i].x) * (e.X - A[i].x) + (e.Y - A[i].y) * (e.Y - A[i].y) <= (rv + re) * (rv + re))
{ b = true; break; }
if (!b & !mcrest )
{ //не найдена вершина - занести новую вершину
if (kv < maxkv)
{
A[kv].n = kv; A[kv].x = e.X; A[kv].y = e.Y; A[kv].r = rv; A[kv].e = true;
A[kv].c = Col[q]; A[kv].q = q;
if (kv > 0) Atek = A[kv - 1];
kv++;
}
}
else
{ //найдена i-я вершина на клике мышки- если тек. вершина заполнена рисуем ребро
if (rcrest)
{//удалить вершину
if (Atek.n == A[i].n && Atek.e)
if (i > 0) Atek = A[i - 1];
else Atek.e = false;
A[i].e = false;
//удалить все ребра, связанные с данной вершиной
int j;
for (j = 0; j < kv; j++)
X[i, j] = X[j, i] = 0;
if (i == (kv - 1))
{ for (j = kv - 1; j >= 0 && !A[j].e; j--);kv = j + 1; }
}
else if (rrib)
{//удалить ребро
if (!Atek.e) Atek = A[i];
else
{
X[Atek.n, A[i].n] = X[A[i].n, Atek.n] = 0;
Atek = A[i];
}
}
else if (mcrest)
{//переместить вершину
if (!Atek.e) Atek = A[i];
else
{
b = false;
for (i = 0; i < kv; i++)
if (A[i].n == Atek.n) { b = true; break; }
if (b) { A[i].x = Atek.x = e.X; A[i].y = Atek.y = e.Y; }
}
}
else
{ //заполнить новое ребро
if (!Atek.e) Atek = A[i];
else
{//завести ребро (Atek - A[i])
X[Atek.n, A[i].n] = 1; //заполнили таблицу смежности
//Матрица инцидентности
Y[z].m = Atek.n; Y[z].k = A[i].n; Y[z].n = z;
In[Y[z].m, Y[z].n] = 1;
In[Y[z].k, Y[z].n] = -1;
Atek = A[i];
}
}
//Счетчик дуг
z = 0;
for (int ii = 0; ii < kv; ii++)
{
for (int jj = 0; jj < kv; jj++)
z += X[ii, jj];
}
//Матрица смежности и инцидентности на label3
label3.Text = "Матрица инцедентности\n";
for (int q = 0; q < kv; q++)
{
for (int w = 0; w < z; w++)
label3.Text += In[q,w] + " ";
label3.Text +="\n";
}
label3.Text += "\nМатрица смежности\n";
for (int q = 0; q < kv; q++)
{
for (int w = 0; w < kv; w++)
label3.Text += X[q, w] + " ";
label3.Text += "\n";
}
}
}
Invalidate();
}
5. СОДЕРЖАНИЕ ОТЧЕТА
-
наименование работы, постановку задачи;
-
выбранный вариант задания;
-
результаты решения задач без применения ЭВМ;
-
программу решения задачи (представляется в электронном виде;
-
результаты работы программы и их анализ.
6. КОНТРОЛЬНЫЕ ВОПРОСЫ
-
Дайте определение понятию граф.
-
При каком условии ребро инцидентно вершинам?
-
Как называется вершина А при условии p(A)=0, где р(А)-степень вершины А? при р(А)=1?
-
Любой ли однородный граф является полным? Любой ли полный граф является однородным?
-
Является ли следующий граф связным (рис. 3)?
Рисунок 3
-
Может ли граф не содержать ребер? вершин?
-
Что значит задать граф?
-
На какие два основных класса делятся матрицы графов? Дайте определение матрице смежности и матрице инцидентности?
7. ЛИТЕРАТУРА
ОСНОВНАЯ ЛИТЕРАТУРА
-
Яблонский С. В. Введение в дискретную математику: [Учеб. Пособие для ВУЗов по спец. «Прикладная математика»] – М.: Наука, 2011-272с, Кл. 22 см
-
Оре, Ойстин Теория графов/ Пер. с англ. И. Н. Врублевской. Под редакцией Н. Н. Воробьева – 2-е изд. Стереотипное. М.: Наука, 20008336 с.
-
Ф. А. Новиков Дискретная математика для программистов: Учеб. пособие для ВУЗов по направлениям: «Информатика и вычислительная техника»/Ф. А. Новиков – 2-е изж. – М. Спб.: Питер, 2007 – 363 с.
-
Горбатов В. А. Дискретная математика: Учеб. для втузов В. А. Горбатов. – М.АСТ; Астель, 2003 – 447с (Высшая школа)
ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА
1. Ф. А. Новиков, Дискретная математика для программистов: Учеб. пособие для ВУЗов по направлениям: «Информатика и вычислительная техника»/Ф. А. Новиков – 2-е изж. – М. Спб.: Питер, 2007 – 363 с.
2. Род Хаггарти «Дискретная математика для программистов. Discrete Mathematics for Computing».
Издательство: Техносфера, 2005 г., 400 стр.
3. О. П. Кузнецов «Дискретная математика для инженера».
Издательство: Лань, 2007 г., 400 стр.
4. В. А. Емеличев, О. И. Мельников, В. И. Сарванов, Р. И. Тышкевич «Лекции по теории графов»
Издательство: Либроком, 2009 г., 392 стр.