1. Дан ориентированный граф с N вершинами (N<50). Вершины и дуги окрашены в цвета с номерами от 1 до М (М<6). Указаны две вершины, в которых находятся фишки игрока и конечная вершина. Правило перемещения фишек: игрок может передвигать фишку по дуге, если ее цвет совпадает с цветом вершины, в которой находится другая фишка; ходы можно делать только в направлении дуг графа; поочередность ходов необязательна. Игра заканчивается, если одна из фишек достигает конечной вершины. Написать программу поиска кратчайшего пути до конечной вершины, если он существует.
2. Задан неориентированный граф. При прохождении по некоторым ребрам отдельные (определенные заранее) ребра могут исчезать или появляться. Написать программу поиска кратчайшего пути из вершины с номером q в вершину с номером w.
3. Заданы два числа N и М (20<M<N<150), где N — количество точек на плоскости. Написать программу построения дерева из М точек так, чтобы оно было оптимальным.
Примечание. Дерево называется оптимальным, если сумма всех его ребер минимальна. Все ребра — это расстояния между вершинами, заданными координатами точек на плоскости.
|
|
4. Даны два числа N и М. Написать программу построения графа из N вершин и М ребер. Каждой вершине ставится в соответствие число ребер, входящих в нее. Граф должен быть таким, чтобы сумма квадратов этих чисел была минимальна.
5. Задан ориентированный граф с N вершинами, каждому ребру которого приписан неотрицательный вес. Написать программу поиска простого цикла, для которого среднее геометрическое весов его ребер было бы минимально.
Примечание. Цикл называется простым, если через каждую вершину он проходит не более одного раза, петли в графе отсутствуют.
6. Внутрь квадрата с координатами левого нижнего угла (0,0) и координатами верхнего правого угла (100, 100) поместили N (1<N<30) квадратиков. Написать программу поиска кратчайшего пути из точки (0,0) в точку (100,100), который бы не пересекал ни одного из этих квадратиков. Ограничения:
· длина стороны каждого квадратика равна 5;
· стороны квадратиков параллельны осям координат;
· координаты всех углов квадратиков — целочисленные;
· квадратики не имеют общих точек.
Примечание. Строится граф из начальной, конечной точек и вершин квадратиков (ребра не должны пересекать квадраты). Затем ищется кратчайший путь, например, с помощью алгоритма Дейкстры.
7. Задан неориентированный граф с N вершинами, пронумерованными целыми числами от 1 до N. Написать программу, которая последовательно решает следующие задачи:
· выясняет количество компонент связности графа;
· находит и выдает все такие ребра, что удаление любого из них ведет к увеличению числа компонент связности;
|
|
· определяет, можно ли ориентировать все ребра графа таким образом, чтобы получившийся граф оказался сильно связным;
· ориентирует максимальное количество ребер, чтобы получившийся граф оказался сильно связным;
· определяет минимальное количество ребер, которые следует добавить в граф, чтобы ответ на третий пункт был утвердительным.
8. Задан ориентированный граф с N (1<N<30) вершинами, пронумерованными целыми числами от 1 до N. Разработать программу, которая подсчитывает количество различных путей между всеми парами вершин графа.
9. Задан ориентированный граф с N вершинами, пронумерованными целыми числами от 1 до N. Разработать программу, которая подсчитывает количество различных путей между всеми парами вершин графа.
Входные данные. Входной файл input.txt содержит количество вершин графа N (1<N<30) и список дуг графа, заданных номерами начальной и конечной вершин.
Выходные данные. В выходной файл output.txt вывести матрицу N×N, элемент (i,j) которой равен числу различных путей, ведущих из вершины i в вершину j или -1, если существует бесконечно много таких путей.
10. Дан ориентированный граф. Вершинам приписаны веса. Начальная и конечная вершины заданы. Требуется найти путь между этими вершинами с максимально возможным суммарным весом. Путь должен удовлетворять следующим условиям:
· по каждой дуге разрешается пройти один раз;
· если в вершину попадаем по входящей дуге, то к суммарному весу вес этой вершины прибавляется;
· если в вершину попадаем по выходящей дуге, то из суммарного веса вес этой вершины вычитается.
Входные данные. Входной файл input.txt содержит данные в следующей последовательности:
· N x 1 х2... xN — количество вершин графа и их веса (1≤ N ≤30, 1< хi <30000);
· b,e — номера начальной и конечной вершин;
· М — количество дуг;
· i1, j1 — номера вершин, соединяемых первой дугой;
· i2, j2 — номера вершин, соединяемых второй дугой;
· iM, jM — номера вершин, соединяемых дугой с номером М.
Выходные данные. В выходной файл output.txt требуется вывести максимальный вес пути и путь, на котором он достигается. В случае, если решение не существует, выходной файл должен содержать единственную строку «решения нет».
11. Дан взвешенный (ребрам приписаны веса) связный граф G=(V,E).
Обозначим через D{v,u} минимальное расстояние между вершинами v,u € V. Величина D(G) = Max(D(v,u)) называется диаметром графа. Величина R(v) = Max(D(v,u)) максимальным удалением в графе от вершины v. Величину R(G) = Min(R(v)) называют радиусом графа. Любая вершина t€V, такая, что R(t)=R(G), называется центром графа.
Разработать программу поиска диаметра, радиуса и центров графа.
Примечание. Первый шаг решения заключается в формировании матрицы минимальных расстояний между всеми парами вершин графа.
12. Согласно теореме Д. Кенига (1936 г.) для двудольности графа необходимо и достаточно, чтобы он не содержал циклов нечетной длины. Определить, является ли заданный граф двудольным.
Примечание. При поиске в ширину вершины графа помечаются метками 0, 1, 2 и т. д. Первой вершине, с которой начинается просмотр, приписывается метка 0, вершинам, связанным с ней, — метка 1 и т. д. Разобьем граф после просмотра на два подграфа: подграф X включает вершины с четными метками, подграф Y — с нечетными. Если оба подграфа пусты — исходный граф является двудольным.
13. Задача Штейнера на графах. В связном взвешенном графе G с выделенным подмножеством вершин U (U € V) требуется найти связный подграф Т, удовлетворяющий двум условиям:
· множество вершин подграфа Т содержит заданное подмножество U;
· граф Т имеет минимальный вес среди всех подграфов, удовлетворяющих первому условию.
|
|
Примечание. Очевидно, что искомый подграф является деревом, оно называется деревом Штейнера. Задача сводится к нахождению дерева минимального веса в подграфах графа G, множество вершин которых содержит U. Эффективных алгоритмов решения задачи неизвестно, поэтому наиболее простой состоит в переборе вариантов при небольших значениях числа вершин.
14. Задача о пяти ферзях. На шахматной доске 8x8 расставить наименьшее число ферзей так, чтобы каждая клетка доски была под боем.
Примечание. Построить граф для данной доски с учетом правил перемещения ферзя. Всякой искомой расстановке соответствует наименьшее доминирующее множество в графе.
15. Для заданного ориентированного графа с N вершинами разработать :
· структуру представления графа;
· процедуру заполнения графа из N узлов;
· процедуру поиска всех путей от заданной вершины ко всем остальным методом в глубину;
· процедуру поиска кратчайших путей от заданной вершины ко всем остальным методом в ширину;
· процедуру построения остового дерева графа.