Министерство Образования и науки Российской Федерации
Новосибирский Государственный Технический Университет
Кафедра ПМИ
Курсовая работа по дисциплине
“Структуры данных и алгоритмы”
Факультет: ПМИ
Группа: Пми-51
Студент: Коновалов В.О.
Преподаватель: Шапошникова Т. А.
Новосибирск, 2006
1.Условие задачи
(№56 – Касьянов) Найти минимальное подмножество вершин заданного орграфа, от которых достижимы все остальные его вершины.
2.Анализ задачи
Дано: Входной файл “D:\input.txt”.
Представление данных: <Граф>
<Граф>:= <Список вершин> {<Список дуг>}
<Список вершин>:=<Название вершины> {<,> <Название вершины>}
<Список дуг>:=<Дуга> {<Дуга>}
<Название вершины>:=<Символ>{<Символ>}
<Символ>:=<a> || <b> || … || <z> || <0> || <1> || … || <9> || < > || <A> || <B> || … || <Z>
<Дуга>:=<\n> <Название вершины> <-> <Название вершины>
Результат: Выходной файл “D:\output.txt”.
Представление данных: <Подмножество вершин>
<Подмножество вершин>:=<Название вершины> <,>{<Название вершины> < >}
<Название вершины>:=<Символ>{<Символ>}
<Символ>:=<a> || <b> || … || <z> || <0> || <1> || … || <9> || < > || <A> || <B> || … || <Z>
Метод решения:
i. Вариант из i заполняется номерами вершин по порядку с 1 до i-й вершины.
ii. Проверяем подмножество на доступность всех путей из этого подмножества:
1. создаём строчку обнулённую размером количество вершин графа, а затем записываем в ячейки 1, если из подмножества доступна вершина, с порядковым номер = номеру столбца строчки.
iii. Если количество вариантов закончилось, то начинаем анализ с подмножеством, состоящим из i + 1 вершин (Количество вариантов закончилось, если 1-й элемент варианта равен количество вершин минус i плюс 1
iv. Создаём следующий вариант
1. q=i.
2. увеличиваем q-ое число в варианте на единицу.
3. делаем все все числа с q+1 до i-го равными q-ое+1, q-ое+2 и т.п.
4. если q-ое число больше, чем количество вершин + q минус i, то уменьшаем q на единицу и идём в действие №3.a,iv,2.
v. Проверяем подмножество на доступность всех путей из этого подмножества.
vi. идём в действие №3.a.iii.
3.Структура основных входных и выходных данных
Внешнее представление |
Внутреннее представление |
|
Входные данные |
Заданы названия вершин. На следующей строке могут быть заданы, либо отсутствовать, дуги: от какой вершины какая дуга ведёт к какой вершине (название вершины - название вершины, переход на следующую строку либо конец файла) |
Динамический список-списков list *head, с Названиями вершин, заданный структурой: struct name { name *next; char sim; }; struct list { list *next; name *sim; }; После анализа дуг граф представляется двумерным массивом размером количество вершин на количество вершин, в котором строка представляет собой порядковый номер вершины, а элементы в ней либо 0, либо 1, если из вершины идёт дуга в вершину с порядковым номером = номеру столбца. |
Выходные данные |
Перечисление вершин, составляющих минимальное подмножество вершин, от которых достижимы все остальные его вершины. |
Динамический список-списков list *head, с Названиями вершин, заданный структурой: struct name { name *next; char sim; }; struct list { list *next; name *sim; }; Динамический массив buf с порядковыми номерами вершин. Выходной файл: “D:\output,txt”. С записанными названиями вершин графа через <,>. |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.