Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 07.12.2020
Сообщений: 4
Записей в блоге: 1

Как найти наибольший путь в графе

24.12.2020, 18:12. Показов 1198. Ответов 0

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, как найти наибольший путь и потом нужно вычислить среднее арифметическое наибольшего и наименьшего пути, и найти путь который имеет длину равную этому среднему арифметическому

Вот мой код:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
class Vertex:
    def __init__(self, id, name):
        self.id = id
        self.name = name
        self.minDistance = float('inf')
        self.previousVertex = None
        self.edges = []
 
    def __str__(self):
        return "{"+str(self.id)+"}"
 
 
class Edge:
    def __init__(self, source, target, weight):
        self.source = source
        self.target = target
        self.weight = weight
 
# Находим кратчайшее расстояние с помощью Дейкстры
 
 
class Dijkstra:
    def __init__(self):
        self.vertexes = []
        self.start = None
        pass
 
    def createGraph(self, vertexes, edgesToVertexes):
        self.vertexes = vertexes
        for edge in edgesToVertexes:
            for vertex in vertexes:
                if vertex.id == edge.source:
                    vertex.edges.append(edge)
 
    def computePath(self, sourceId):
        self.start = sourceId
        visit = []
        visited = []
        for item in self.vertexes:
            if item.id == sourceId:
                item.minDistance = 0
                item.previousVertex = sourceId
            visit.append(item.id)
 
        while len(visited) != len(visit):
            start = self.getMin(visited)
 
            for edge in start.edges:
                end = self.getVertex(edge.target)
                way = start.minDistance + edge.weight
                if end.minDistance >= way:
                    end.previousVertex = start.id
                    end.minDistance = way
            visited.append(start.id)
 
    def getShortestPathTo(self, targetId):
        way = []
        tmp = self.getVertex(targetId)
        way.insert(0, tmp)
        while tmp.previousVertex != tmp.id:
            tmp = self.getVertex(tmp.previousVertex)
            if tmp is None:
                break
            way.insert(0, tmp)
        return way
 
    def getMin(self, array):
        min = Vertex('a', 'tmp')
        min.minDistance = float('inf')
        for item in self.vertexes:
            if (item.minDistance <= min.minDistance) and (item.id not in array):
                min = item
        return min
 
    def getVertex(self, id):
        vertex = None
        for item in self.vertexes:
            if item.id == id:
                vertex = item
                break
        return vertex
 
    def getVertexes(self):
        return self.vertexes
 
 
with open('input_graph1.txt') as f:
    matrix =[list(map(int, row.split())) for row in f.readlines()]
 
n = len(matrix)
 
try:
    a = int(input("Откуда ? : "))
    b = int(input("Куда ? : "))
 
    if (a > 0) and (b > 0) and (a <= 15) and (b <= 15):
        a = a - 1
        b = b - 1
 
        vertexes = []
        edges = []
        for i in range(len(matrix)):
            v = Vertex(i, str(i + 1))
            for k in range(len(matrix[i])):
                if matrix[i][k] == 0:
                    continue
                e = Edge(i, k, matrix[i][k])
                edges.append(e)
            vertexes.append(v)
 
        dijkstra = Dijkstra()
        dijkstra.createGraph(vertexes, edges)
 
        vertexToCompute = vertexes[a]
        dijkstra.computePath(a)
        path = dijkstra.getShortestPathTo(b)
        for vertex in path:
            print("Путь -> " + str(vertex.name))
        print("Минимальное расстояние: " + str(vertexes[b].minDistance))
    else:
        print("Введенное число(а) не в интервале 1..15")
except ValueError:
    print("Введенное значения не число")
код определяет всё по матрице:
0 0 0 3 0 0 0 0 0 0 0 0 0 1 0
0 0 2 0 0 0 0 0 0 0 0 0 0 2 0
0 2 0 0 4 0 4 3 0 0 0 0 0 0 0
3 0 0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 4 0 0 0 2 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 2 0 0 0 0 0
0 0 4 0 2 0 0 0 1 0 0 0 0 0 0
0 0 3 0 0 0 0 0 2 0 0 0 0 0 0
0 0 0 0 0 0 1 2 0 0 3 0 2 0 1
0 0 0 0 0 2 0 0 0 0 2 3 0 0 0
0 0 0 0 0 0 0 0 3 2 0 2 0 0 3
0 0 0 0 0 0 0 0 0 3 2 0 0 0 2
0 0 0 0 0 0 0 0 2 0 0 0 0 0 1
1 2 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 3 2 1 0 0
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2020, 18:12
Ответы с готовыми решениями:

Найти наибольший циклический путь в графе
Есть граф Ввод: 0 1 0 0 1 0 1 0 1 1 0 0 Вывод 5

Как найти НЕ Кратчайший путь в графе ?
Мне нужно найти не кратчайший путь в графе от одной вершины к другой, граф неориентированный, задан списком смежности типа: 5 1 1 2 3...

Как найти кратчайший путь на графе?
Задана прямоугольная матрица размера M×N в которой заданы числа. Требуется написать программу, которая находит путь минимальной длины из...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2020, 18:12
Помогаю со студенческими работами здесь

Как можно найти путь от определенной точки к другой в графе
у меня есть поиск в ширину, как можно найти путь от определенной точки к другой? или нужно использовать поиск в глубину? функция...

Как с помощью алгоритма Беллмана-Мура найти кратчайший путь в ор.графе?
Здравствуйте, расскажите, пожалуйста, по-этапно, как с помощью алгоритма Беллмана-Мура найти кратчайший путь в ор.графе, С чего начать и...

Найти на графе путь между двумя вершинами, который содержит ребра как можно большей длины
Может кто-нибудь написать последовательность действий или, если у такого алгоритма есть название, как он называется? Пытался изменить...

Найти наибольший поток на графе
С помощью Алгоритма Форда-Фалкерсона

Найти путь в графе
подскажите какой алгоритм поиска лучше применить и как в данной задаче &quot; В системе двусторонних дорог за проезд дороги взымается...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru