Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

дискретка_все_практики / дискретка / Раздел 1 Практика 1

.doc
Скачиваний:
37
Добавлен:
22.05.2015
Размер:
492.03 Кб
Скачать

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. КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Дайте определение понятию граф.

  2. При каком условии ребро инцидентно вершинам?

  3. Как называется вершина А при условии p(A)=0, где р(А)-степень вершины А? при р(А)=1?

  4. Любой ли однородный граф является полным? Любой ли полный граф является однородным?

  5. Является ли следующий граф связным (рис. 3)?

Рисунок 3

  1. Может ли граф не содержать ребер? вершин?

  2. Что значит задать граф?

  3. На какие два основных класса делятся матрицы графов? Дайте определение матрице смежности и матрице инцидентности?

7. ЛИТЕРАТУРА

ОСНОВНАЯ ЛИТЕРАТУРА

  1. Яблонский С. В. Введение в дискретную математику: [Учеб. Пособие для ВУЗов по спец. «Прикладная математика»] – М.: Наука, 2011-272с, Кл. 22 см

  2. Оре, Ойстин Теория графов/ Пер. с англ. И. Н. Врублевской. Под редакцией Н. Н. Воробьева – 2-е изд. Стереотипное. М.: Наука, 20008336 с.

  3. Ф. А. Новиков Дискретная математика для программистов: Учеб. пособие для ВУЗов по направлениям: «Информатика и вычислительная техника»/Ф. А. Новиков – 2-е изж. – М. Спб.: Питер, 2007 – 363 с.

  4. Горбатов В. А. Дискретная математика: Учеб. для втузов В. А. Горбатов. – М.АСТ; Астель, 2003 – 447с (Высшая школа)

ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА

1. Ф. А. Новиков, Дискретная математика для программистов: Учеб. пособие для ВУЗов по направлениям: «Информатика и вычислительная техника»/Ф. А. Новиков – 2-е изж. – М. Спб.: Питер, 2007 – 363 с.

2. Род Хаггарти «Дискретная математика для программистов. Discrete Mathematics for Computing».

Издательство: Техносфера, 2005 г., 400 стр.

3. О. П. Кузнецов «Дискретная математика для инженера».

Издательство: Лань, 2007 г., 400 стр.

4. В. А. Емеличев, О. И. Мельников, В. И. Сарванов, Р. И. Тышкевич «Лекции по теории графов»

Издательство: Либроком, 2009 г., 392 стр.

Соседние файлы в папке дискретка