Минимальное покрытие

Постановка задачи и алгоритм минимального покрытия для заданной таблицы, который можно редактировать с рабочей формы. Описание базового класса и визуализация программы. Реализация алгоритма вершинного покрытия для изменения размеров таблицы пользователем.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.08.2017
Размер файла 92,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ГОРНЫЙ УНИВЕРСИТЕТ

КАФЕДРА ИНФОРМАТИКИ

КУРСОВАЯ РАБОТА

по программированию

МИНИМАЛЬНОЕ ПОКРЫТИЕ

Студент: Ростовщиков Н.В.

гр. АСУ - 09 - 2

алгоритмический язык: С#

среда разработки: Microsoft Visual Studio 2010

Преподаватель: доц. Дружинин А.В.

Екатеринбург 2010

Оглавление

1. Постановка задачи

2. Визуализация

3. Пример работы программы

4. Листинг

Литература

1. Постановка задачи

минимальный покрытие таблица алгоритм

Требуется расчитать минимальное покрытие для заданной таблицы, который можно редактировать с рабочей формы

2. Визуализация

В программе реализован алгоритм вершинного покрытия. Пользователь может изменят размеры таблицы. На форме две кнопки: "определить минимальное покрытие" - соответственно после нажатия определит минимальное покрытие, результат будет выведен в соседней таблице. Кнопка "перемешать" заполняет исходную таблицу случайными значениями.

3. Примеры работы программы

Все действия с программой производятся в одном окне, представленном ниже:

4. Листинг

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace _2

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

// очищаем таблицу 1

dataGridView1.Rows.Clear();

// делаем невидимыми все столбцы таблицы 1

for (int i = 0; i < numericUpDown2.Maximum; i++)

dataGridView1.Columns[i].Visible = false;

// добавляем соответствующее количество строк

for (int i = 0; i < numericUpDown1.Value; i++)

dataGridView1.Rows.Add(numericUpDown1.Value);

// делаем видимыми соответствующее количество столбцов

for (int i = 0; i < numericUpDown2.Value; i++)

dataGridView1.Columns[i].Visible = true;

Random rnd = new Random(); // переменная для случайного задания элементов таблицы

// пробегаем по всем строкам таблицы 1

foreach (DataGridViewRow row in dataGridView1.Rows)

{

// задаём номер строки в столбце названий

row.HeaderCell.Value = (row.Index + 1).ToString();

// пробегаем по каждой ячейке в строке

foreach (DataGridViewCell cell in row.Cells)

// и задаём значение ячейки

cell.Value = rnd.Next() % 2; // это операция 'остаток от деления на 2' - соответственно 0 или 1

}

}

private void button2_Click(object sender, EventArgs e)

{

int i, j; // счётчики циклов

int coverCount; // количество строк, покрывающих таблицу

int [] Cover = new int [dataGridView1.RowCount]; // массив с номерами строк, составляющих мин. покрытие

int isFind; // признак того, что данный столбец уже покрыт

//unsigned long *table = new unsigned long [StringGrid1->RowCount];

//for (j=0; j<StringGrid1->RowCount; j++) {

// table[j] = 0;

// for (i=1; i<StringGrid1->ColCount; i++) {

// table[j] <<= 1;

// if (StringGrid1->Cells[i][j] == '1') {

// table[j] += 1;

// }

//}

//}

//Cover = new int [StringGrid1->RowCount]; // выделение памяти для массива номеров строк

coverCount = 0;

// цикл начинается с 1, поскольку 0-й столбец содержит названия строк

for (i = 0; i < numericUpDown2.Value; i++)

{

// сначала производится проверка, покрыт ли i-й столбец

isFind = 0;

// поиск осуществляется среди отобранных строк

for (j = 0; j < coverCount; j++)

{

// если в списке отобранных строк уже содержится i-й столбец,

if (dataGridView1[i, Cover[j]].Value.ToString() == "1")

{

// то устанавливаем соответствующий признак

isFind = 1;

// и выходим из цикла for (j...

break;

}

}

// если же среди отобранных строк нет покрытия текущего i-го столбца

if (isFind == 0)

{

// то пробегаем по всем строкам

for (j = 0; j < numericUpDown1.Value; j++)

{

// и если на пересечении i-го столбца и j-й строки стоит 1,

if (dataGridView1[i, j].Value.ToString() == "1")

{

// то заносим текущую j-ю строку в список Cover

Cover[coverCount] = j;

// и увеличиваем счётчик

coverCount++;

break;

}

}

}

}

// очищаем таблицу 2

dataGridView2.Rows.Clear();

// добавляем соответствующее количество строк

for (i = 0; i < coverCount; i++)

dataGridView2.Rows.Add("");

// делаем невидимыми все столбцы таблицы 2

for (i = 0; i < numericUpDown2.Maximum; i++)

dataGridView2.Columns[i].Visible = false;

// делаем видимыми соответствующее количество столбцов

for (i = 0; i < numericUpDown2.Value; i++)

dataGridView2.Columns[i].Visible = true;

// копируем найденные строки из таблицы 1 в таблицу 2

for (i = 0; i < numericUpDown2.Value; i++)

for (j = 0; j < coverCount; j++)

{

dataGridView2[i, j].Value = dataGridView1[i, Cover[j]].Value.ToString();

dataGridView2.Rows[j].HeaderCell.Value = dataGridView1.Rows[Cover[j]].HeaderCell.Value.ToString();

}

}

}

}

Литература

1. http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%BC_%D0%BF%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B8 -Задача о вершинном покрытии

2. http://rain.ifmo.ru/cat/view.php/vis/graph-general/vertex-cover-2005- ДИСКРЕТНАЯ МАТЕМАТИКА: АЛГОРИТМЫ

3. http://rain.ifmo.ru/cat/view.php/vis/graph-general/vertex-cover-2005/algorithm - ДИСКРЕТНАЯ МАТЕМАТИКА: АЛГОРИТМЫ

Размещено на Allbest.ru


Подобные документы

  • Общее понятие графа, его виды и сущность вершинного покрытия. Написание точного алгоритма решения задачи о надежности сети, нахождение минимального покрытия. Реализация данного алгоритма на языке TurboC++. Код программы, решающий поставленную задачу.

    курсовая работа [1,3 M], добавлен 27.06.2014

  • Алгоритм сортировки Шейкер: математическое описание задачи и описание алгоритма. Алгоритм покрытия: построение одного кратчайшего покрытия. Описание схемы и работы алгоритма на графах: нахождение кратчайшего пути. Контрольные примеры работы алгоритмов.

    курсовая работа [43,8 K], добавлен 19.10.2010

  • Описание алгоритма сортировки с двоичным включением, выбор структур данных. Пример сортировки массива, отсортированного случайным образом. Алгоритм покрытия по методу "Построение одного кратчайшего покрытия". Волновой алгоритм поиска длиннейшего пути.

    курсовая работа [78,2 K], добавлен 24.09.2010

  • Постановка задачи для машинного моделирования, определение параметров и переменных. Алгоритмизация модели и её машинная реализация. Реализация алгоритма моделирования на общесистемном языке программирования. Описание диалога с пользователем, интерфейс.

    курсовая работа [703,1 K], добавлен 14.01.2013

  • Разработка исходного XML-документа, который будет содержать данные варианта. Разработка таблицы стилей XSLT для преобразования исходного XML-документа исходного XML-документ с заданной структурой. Анализ базового класса, содержащего виртуальные методы.

    курсовая работа [1,3 M], добавлен 01.05.2019

  • Универсальная подпрограмма по записи элементов и атрибутов из таблицы XML в различные массивы, в зависимости от раздела. Алгоритм трехмерной визуализации. Классы разбора таблицы XML по элементам и атрибутам. Алгоритмы работы с двухмерными объектами.

    дипломная работа [425,9 K], добавлен 06.03.2013

  • Содержательная и формальная (математическая) постановка задачи. Разработка алгоритма решения задачи. Структуры программы и алгоритмы программных модулей, их описание. Решение задачи на конкретном примере. Разработка системы тестов и отладка программы.

    курсовая работа [882,1 K], добавлен 24.11.2014

  • Описание возможностей и функций программы MS Excel. Визуализация данных, оформление таблицы, фомат и диапазон ячеек в MS Excel. Описание пошагового создания диаграммы в MS Excel и настройка ее параметров. Техника безопасности при работе на компьютере.

    курсовая работа [998,7 K], добавлен 27.08.2010

  • Составление треугольной таблицы. Нахождение списка максимальных классов совместимости, минимального замкнутого покрытия. Получение логических функций выходов автомата. Синтез конечного автомата и функциональной схемы. Принципиальная электрическая схема.

    контрольная работа [215,8 K], добавлен 22.06.2012

  • Алгоритмическое решение задач как метод формализации. Реализация простейшей самоорганизующейся таблицы с самоорганизацией методом транспозиции. Описание модулей алгоритма и листинг программы для определения функциональной зависимости в массиве данных.

    курсовая работа [219,9 K], добавлен 25.11.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.