Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125

Как найти цикл в графе

17.05.2023, 20:34. Показов 3270. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана матрица смежности графа. Необходимо проверить граф на наличие циклов и вывести вершины входящие в цикл. (если компонентов связности несколько надо проверить каждый компонент)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2023, 20:34
Ответы с готовыми решениями:

Найти цикл в графе
Дан граф, содержащий только один цикл. Нужно найти его (все его вершины). Код не нужен, нужна только идея.

Найти цикл в графе
matr (1,2) = 1; matr (2,6) = 4; matr (6,4) = 1; matr (4,1) = 2; matr (5,4) = 2; matr (7,5) = 5; matr (7,3) = 4; matr (3,1) =...

Найти кратчайший цикл в графе
Есть граф, заданный матрицей смежности. У меня есть реализация обхода графа в ширину, как с его помощью найти кратчайший цикл? import...

11
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
17.05.2023, 20:59
Senoki, и какие сложности возникли?
0
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
17.05.2023, 21:14  [ТС]
eaa, понятия не имею как работать с несвязными графами
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
17.05.2023, 21:20
Senoki, напиши для связного. подскажу как переделать для несвязного.
0
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
17.05.2023, 21:47  [ТС]
eaa, а как написать для связного неорентированного графа с обходом в глубину? не совсем понятно в какой момент программа должна понять, что найден цикл.
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
17.05.2023, 21:55
Запускаешь dfs(обход в глубину) и если встретилась уже посещённая вершина, то есть цикл.
0
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
17.05.2023, 22:19  [ТС]
eaa, как-то так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def DFS(G, s): 
    n = len(G)
    used = [False] * n+1
    S = []
    S.append(s)
    used[s] = True
    b = [s]
    
 
    while(S != []): 
        v = S[-1] 
        S.pop()
        g = s
        for i in G[v]:
            if (used[i] == False): 
                S.append(i)
                b.append(i)
                used[i] = True
        if s == g:
            if len(G[v]) == 1:
                continue
            else:
                for i in G[v]:
                    if (used[i] == True):
                        b.append(i)
                        return(b[v-1:i+1])
 
graph = {1: set([2]),
         2: set([3, 4]),
         3: set([2, 4]),
         4: set([2, 3, 5]),
         5: set([4])}
k = 1
print(DFS(graph, k))
Правда выводит ошибку в последней строке TypeError: can only concatenate list (not "int") to list
0
 Аватар для s_t_r_a_j
526 / 179 / 58
Регистрация: 12.02.2023
Сообщений: 641
17.05.2023, 22:33
в 3 строке
Python
1
used = [False] * (n+1)
2
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
18.05.2023, 05:03
Senoki, т.е. это не твой код? раз не можешь в такой ошибке разобраться.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
18.05.2023, 07:00
Вот код генерирующий все фундаментальные циклы в графе:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Ввод графа (списком ребер)
 
def get_graph():
    (n,m)=map(int,input().split())
    graph=[]
    for _ in range(m):
        (a,b)=map(int,input().split())
        graph.append((a,b))
    return graph    
 
# Обход в глубину, совмещенный с поиском фундаментальных циклов
 
def dfs_loops(graph):
    
    stack=[1]
    chk=[1]
    
    while True:
    
        if len(stack)==0:
            print("OK")
            return
        
        v=stack[-1]
        
        for (a,b) in graph:
            
            #if (a==v) and not (b in chk):  # это для ориентированного графа
 
            if (a == v) and not (b in chk) or \
               (b == v) and not (a in chk):
                
                if a==v:
                    bb=b
                else:
                    bb=a
                   
                stack.append(bb)
                chk.append(bb)
                
                # Проверка цикла
                
                sz=len(stack)
                
                for i in range(sz-2):
 
                    #if (bb,stack[i]) in graph:  # это для ориентированного графа
 
                    if (bb,stack[i]) in graph or (stack[i],bb) in graph: 
                        print("Loop:",end=' ')
                        for j in range(i,sz):
                            print(stack[j],end=' ')
                        print()
                break
        
        else:
            stack.pop()
 
g=get_graph()
 
dfs_loops(g)
Диалог:

6 8
1 2
1 3
2 3
2 4
3 4
4 5
4 6
5 6
Loop: 1 2 3
Loop: 2 3 4
Loop: 4 5 6
OK

Граф - на картинке
Миниатюры
Как найти цикл в графе  
1
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
20.05.2023, 21:46  [ТС]
eaa, если бы был не мой, ошибок бы не было

Добавлено через 47 минут
Catstail, а если граф несвязный? как проверить каждый компонент?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
20.05.2023, 21:54
Цитата Сообщение от Senoki Посмотреть сообщение
а если граф несвязный? как проверить каждый компонент?
- если так, в списке chk после завершения останутся нули. Нужно повторить обход, начиная с вершины i, для которой chk[i]=0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2023, 21:54
Помогаю со студенческими работами здесь

Найти цикл в ориентированном графе
Добрый день! У меня такая трабла. Дан ориентированный граф, заданный весовой матрицей. Найти цикл в этом графе. Пробовал вот так. Из...

Найти Эйлеров цикл в графе
Добрый вечер, помогите найти эйлеров цикл в графе из вершины d, как ни пытался, найти не получается, проходил по ребрам от вершины до...

Найти цикл в неориентированном графе
Как можно найти цикл в неориентированном графе. Использовал DFS , он не работает:(

Найти эйлеров цикл в графе
Найдите эйлеров цикл в графе, не содержащем вершин нечетной степени и заданном списками инцидентности.

Найти минимальный цикл в ориентированным графе
Задача: Найти минимальный цикл в ориентированным графе Я нашел и вывел все циклы, но не могу понять что делать дальше. Как найти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru