Автор работы: Пользователь скрыл имя, 22 Декабря 2011 в 22:28, курсовая работа
Целью работы является написание программы на языке программирования, которая из заданного графа выделяла бы максимальный полный подграф с заданным числом вершин. Также представлены результаты решения контрольных примеров, выполненные с помощью разработанной программы.
Для реализации задачи была выбрана программная среда Microsoft Visual C++ 6.0. Решение поставленной задачи в данной работе представлено с помощью пузырькового метода сортировки (на основе сравнений).
ВВЕДЕНИЕ
В данной курсовой работе был рассмотрен раздел теории графов, посвященный максимальным полным подграфам. Теория графов может рассматриваться как раздел дискретной математики, исследующий свойства конечных множеств с заданными отношениями между их элементами. Как прикладная дисциплина теория графов позволяет описывать и исследовать многие технические, экономические, биологические и социальные системы.
Целью работы является написание программы на языке программирования, которая из заданного графа выделяла бы максимальный полный подграф с заданным числом вершин. Также представлены результаты решения контрольных примеров, выполненные с помощью разработанной программы.
Для
реализации задачи была выбрана
программная среда Microsoft Visual C++
6.0. Решение поставленной задачи в данной
работе представлено с помощью пузырькового
метода сортировки (на основе сравнений).
Задача. Знакомства.
Имеется n человек, где 1≤n≤1000. Каждому из них приписано некоторое число, которое определяет количество человек, с которыми ему предписано познакомиться. При этом знакомство взаимно, т.е. если человек с номером i знакомится с человеком с номером j, то и человек с номером j знакомится с человеком с номером i. Составить алгоритм-программу, задача которой состоит в следующем. Необходимо организовать знакомства, чтобы после их реализации участники могли быть разбиты на 2 команды таким образом, что в первой команде находятся участники, знакомые друг с другом (каждый знает каждого), а во второй – только незнакомые (никто никого не знает). При этом численность первой команды должны быть максимальна. В случае невозможности реализации знакомств в выходной файл записать ответ «NO».
Начало теории графов датируют 1736 г., когда Л. Эйлер решил популярную в то время «задачу о кенигсбергских мостах». Термин «граф» впервые был введен спустя 200 лет (в 1936 г.) Д. Кенигом.
При геометрическом представлении графа элементы множества Х изображаются точками плоскости и называются вершинами графа. Линии, соединяющие любые пары точек x и y, из которых у является отображением х, называются дугами графа. Дуги графа имеют направление, обозначаемое стрелкой, которая направлена острием от элемента х к его отображению у. Для разных областей применения виды графов могут различаться направленностью, ограничениями на количество связей и дополнительными данными о вершинах или рёбрах.
Вершина Ребро
Рис.1 Граф
Вершины и рёбра графа называются также элементами графа, число вершин в графе | V | — порядком, число рёбер | E | — размером графа.
Вершины u и v называются концевыми вершинами (или просто концами) рёбра e = {u,v}. Ребро, в свою очередь, соединяет эти вершины. Две концевые вершины одного и того же ребра называются соседними.
Два ребра называются смежными, если они имеют общую концевую вершину.
Подграф Н является отавным графом графа G: VH=VG. Если из графа удалить часть ребер (дуг), то получим частичный граф.
Рис.2
Примеры полных графов
1.3
Применение графов в различных сферах
• «Транспортные» задачи, в которых вершинами графа являются пункты, а ребрами - дороги (автомобильные, железные и др.) и/или другие транспортные (например, авиационные) маршруты. Другой пример - сети снабжения (энергоснабжения, газоснабжения, снабжения товарами и т.д.), в которых вершинами являются пункты производства и потребления, а ребрами - возможные маршруты перемещения (линии электропередач, газопроводы, дороги и т.д.).
• «Технологические задачи», в которых вершины отражают производственные элементы (заводы, цеха, станки и т.д.), а дуги - потоки сырья, материалов и продукции между ними, заключаются в определении оптимальной загрузки производственных элементов и обеспечивающих эту загрузку потоков.
• Управление проектами. С точки зрения теории графов, проект - совокупность операций и зависимостей между ними. Примером является проект строительства некоторого объекта. Решаются задачи определения последовательности выполнения операций и распределения ресурсов между ними, оптимальных с точки зрения тех или иных критериев (времени выполнения проекта, затрат, риска и др.).
• Модели коллективов и групп, используемые в социологии, основываются на представлении людей или их групп в виде вершин, а отношений между ними (например, отношений знакомства, доверия, симпатии и т.д.) - в виде ребер или дуг. В рамках подобного описания решаются задачи исследования структуры социальных групп, их сравнения, определения агрегированных показателей, отражающих степень напряженности, согласованности взаимодействия и др.
• Модели организационных структур, в которых вершинами являются элементы организационной системы, а ребрами или дугами - связи (информационные, управляющие, технологические и др.) между ними.
Таким
образом, многие структуры, представляющие
практический интерес в математике и информатике,
могут быть представлены графами.
Целью алгоритма сортировки является переорганизация записей в файле так, чтобы они располагались в нем в каком-то строго определенном порядке (обычно в алфавитном или числовом).
В нашей работе мы используем сортировку пузырьковым методом. Такая сортировка является наиболее известной и популярной. Ее популярность объясняется запоминающимся названием и простотой алгоритма. Сортировка пузырьковым методом использует метод обменной сортировки. Она основана на выполнении в цикле операций сравнения и при необходимости обмена соседних элементов. Ее название происходит из-за подобия процессу движения пузырьков в резервуаре с водой, когда каждый пузырек находит свой собственный уровень, т.е. на каждом шаге наибольший элемент неотсортированной части подобно пузырьку газа в воде «всплывает вверх».
В
этом методе массив делится на две
части: отсортированную и
Идея метода: шаг
сортировки состоит в проходе снизу вверх
по массиву. Расположим массив сверху
вниз, от нулевого элемента - к последнему.
По пути просматриваются пары соседних
элементов. Если элементы некоторой пары
находятся в неправильном порядке, то
меняем их местами.
Рис.3
После нулевого прохода по массиву «вверху» оказывается самый «легкий» элемент - отсюда аналогия с пузырьком. Следующий проход делается до второго сверху элемента, таким образом, второй по величине элемент поднимается на правильную позицию.
Рис.4 Пример
сортировки
Делаем проходы по все уменьшающейся нижней части массива до тех пор, пока в ней не останется только один элемент. На этом сортировка заканчивается, так как последовательность упорядочена по возрастанию.
Недостатком
пузырькового метода является его длительность
по времени, метод работает слишком
медленно, но на практике очень часто
применяется как один из простейших
методов сортировки.
2.1. Описание данных
Формат файла входных данных. В первой строке входного файла находится число n. В каждой i-й из следующих n строк находится число – количество человек, с которыми необходимо перезнакомиться человеку с номером i.
Формат файла выходных данных. В первой строке выходного файла находится численность первой команды или «NO». В случае, если реализация знакомств возможна, то в каждой из следующих строк должны находиться 2 числа, разделенные пробелом – номера людей, которым необходимо познакомиться. Приведем примеры расчетов для конкретных исходных данных.
По условию задачи алгоритм-программа, используя файл входных данных, должна создавать файл выходных данных output.txt. Примеры этих файлов должны иметь такой вид:
Пример входного файла:
4
3
2
2
1
Пример выходного файла:
3
Для реализации нашего алгоритма воспользуемся пошаговым выполнением: