Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > алгоритм |
Автор: rthsobakas 8.11.2008, 13:57 |
есть граф он записывается в виде матрицы смежности то есть x1 x2 x3 x4 x5 x6 x1 0 1 1 0 0 0 x2 1 0 0 0 0 0 x3 1 0 0 0 0 0 x4 0 0 0 0 0 0 x5 0 0 0 0 0 1 x6 0 0 0 0 1 0 тут 2 графа и они не связаны , то есть x1 ->x2 , x1->x3(первый) x5->x6 (второй) Связи вершин 1 2 3 с 5 6 и с 4 нет ну так вот надо эту матрицу разбить на 3 матрицы(та как 2 графа + 1 x4 ваще одна) первая x1 x2 x3 x1 0 1 1 x2 1 0 0 x3 1 0 0 вторая x5 x6 x5 0 1 x6 1 0 третья x4 Как это сделать? Теоретически я представляю это вот так: Выбираете строчку х1 и проверяете столбцы если в одном из столбов 1 то проверяете строку с номером это столбца на наличие единиц, если и там нашли то смотрите опять на столбец и и ищете опять строку с номером этого столбца и тд пока не заполните новую матрицу , потом по индукции шпарите все остальные вершины. ТОка 3 непонятки : 1) Как практически реализовать алгоритм? 2) Может есть такой алгоритм, как он называется? 3) "Производные" матрицы , сколько их делать не известно заранее, как решить эту проблему? |
Автор: nworm 9.11.2008, 21:40 |
Надо искать алгоритм поиска компонент связности. http://forum.sources.ru/index.php?showtopic=134974&st=0 |
Автор: Dmi3ev 13.11.2008, 13:31 | ||
я делал что-то похожее, только мне надо было записать получившиеся матрицы в файл (делал по учебе), у тебя на диске д создадутся файлы после работы этой программы, в которых будут матрицы, получившиеся после отбора:
не судите строго, я тогда вообще почти не умел программировать, но главное что он работает. не обращай внимания на надписи, которые увидишь. главное, что матрицы лежат в отдельных файлах на диске д, в корне. при следующем выполнении в файлы будет произведена дозапись, если имена совпадут!!! так что надо дорабатывать. это было для учебы, так что я особо не старался, главное было сдать, и то препод удивился извращенности моей мысли))) |