29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
|
1 | |
Поиск двусвязных компонент. Граф задается матрицей смежности09.03.2012, 20:49. Показов 4996. Ответов 1
Метки нет (Все метки)
Всем доброе время суток. У меня такое задание.
Поиск двусвязных компонент. Граф задается матрицей смежности. Матрицу смежности написал, там ничего сложного. А вот как найти двух связные компоненты, вообще понять не могу. Толи по матрице нужно создавать дерево, или прям из матрицы можно? Вообщем вообще понять не могу что это и с чем его кушать. Объясните пж!
0
|
09.03.2012, 20:49 | |
Ответы с готовыми решениями:
1
Неориентированный граф задан матрицей смежности. Найдите степени всех вершин графа Простой неориентированный граф задан матрицей смежности, выведите его представление в виде списка ребер Ориентированный граф задан матрицей смежности. Нарисовать граф с наименьшим количеством пересечений Граф представлен матрицей смежности |
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
||||||||||||||||
20.03.2012, 16:44 [ТС] | 2 | |||||||||||||||
Сообщение было отмечено robert19 как решение
Решение
Написал функцию нахождения двухсвязных компонентов, но не могу правильно их вывести на экран, помогите плиз:
Добавлено через 1 минуту Уже всяко перековеркал код, ничего не выходит((( Добавлено через 9 минут Делал по этому алгоритму, но вывести все равно не получается(( Сформулируем алгоритм поиска точек сочленения более строго. Реализуем рекурсивную функцию void go(int curr, int prev), где curr — текущая вершина, а prev — вершина, из которой мы попали в текущую. При первом вызове curr = r, prev = –1. В теле функции будут выполняться следующие шаги: 1. Запишем в number[curr] номер вершины curr в порядке обхода в глубину. 2. Запишем в L[curr] значение number[curr]. 3. Переберем в цикле все вершины, в которые есть ребро из curr. Для каждой такой вершины i выполним следующие действия: а) Если вершина i еще не посещена, вызовем рекурсивно функцию go с параметрами i, curr. Если после этого значение L[i] стало меньше, чем L[curr], присвоим L[curr] = L[i]. б) Если вершина i уже была посещена и ее номер number[i] < number[curr], и при этом i не равно prev (т.е. ребро (i, prev) обратное и возвращается в вершину с меньшим номером), то если L[curr] > number[i], присвоим L[curr] = number[i]. Данный алгоритм заполнит массивы L[N] и number[N] требуемым образом. Проверять, является ли вершина точкой сочленения, можно на шаге 3a. Также, если реализовать стек для хранения ребер, можно реализовать вывод самих двусвязных компонент: ребро нужно добавлять в стек на шагах 3a (перед рекурсивным вызовом) и 3b и выталкивать из стека в поток вывода все ребра вплоть до текущего (curr, i), если на шаге 3а выяснилось, что для текущей вершины curr выполняется условие теоремы. Добавлено через 48 минут Вроде так:
Вот вроде выше написал, все нормально, но если допустим ввести граф 0010 0011 1100 0100 то ничего работать не будет, выдает ответ: 2 4 ; 3 2 , 1 3 ; А должен: 2 4; 3 2; 1 3;
Поможет кто?
0
|
20.03.2012, 16:44 | |
20.03.2012, 16:44 | |
Помогаю со студенческими работами здесь
2
Ненаправленный граф заданный матрицей смежности Создайте помеченный граф с матрицей смежности Описать граф, заданный матрицей смежности Реализация алгоритма Краскала для графа, который задается матрицей смежности Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |