Реализация графиков с использованием функции класса в python. (Назначение)

#python #python-3.x

#python #python-3.x

Вопрос:

У меня есть задание о функциях класса, поэтому просто укажите мне правильное направление. Мне не нужен ответ, просто небольшая помощь в визуализации проблемы

Согласно нашему уроку, графики состоят из наборов вершин и ребер. Пример графика

итак G = (V, E) , когда V={v1, v2, v3, v4} and E = {(v1, v2), (v1, v3), (v2, v3), (v2, v4), (v4, v1), (v4, v3)}

И мне дается код шаблона, который выглядит следующим образом:

 class Vertex:
    def __init__(self, value=0):  # CAN ADD VAR
        self.key = None
        self.value = value

class Edge:
    def __init__(self, k1, k2, value=0):  # CAN ADD VAR
        self.key = (k1, k2)
        self.value = value

class Graph:
    def __init__(self):  # DO NOT MODIFY
        self._vertice = list()
        self._edges = list()
        self._vkeys = set()
        self._ekeys = set()

    def getV(self):
        return self._vertice[:]

    def getVkeys(self):
        return set(self._vkeys)

    def getE(self):
        return self._edges[:]

    def getEkeys(self):
        return set(self._ekeys)
 

Предполагается, что я использую этот класс для реализации графика и создания другой функции класса, которая имеет дело с направленными и неориентированными графами и сообщает, имеют ли они эйлеровы пути или нет

 class DiGraph(Graph):
    def euler(self):
 

Я просто не знаю, как думать о классе Graph. Я просто думаю об этом как о наборе вершин и ребер, как описано в уроке?

 ({Vertex},{Edge})
 

Я надеюсь, что кто-нибудь может дать мне подсказку

Комментарии:

1. это может помочь python graph или любой книге по структуре данных на python

Ответ №1:

В этом случае у вас есть базовый класс Graph . Он содержит все параметры для графика. Такие вещи, как edges , vertices , и т.д. Тогда у вас есть DiGraph то, что наследуется от Graph . Весь материал из базового Graph класса доступен в DiGraph . DiGraph имеет дополнительную функцию euler . Из этой euler реализации вы должны получить доступ к переменным Graph и решить проблему.

Обновить

Чтобы добавить вершины или ребра в этот класс, вы должны получить к нему доступ извне:

 graph = Graph()
graph._vertice.append(Vertex())
 

Вы можете создать некоторые вспомогательные функции внутри Graph , чтобы добавлять или манипулировать им.

Вот учебное пособие по наследованию int python:
https://docs.python.org/3/tutorial/classes.html

https://www.w3schools.com/python/python_inheritance.asp

Комментарии:

1. Там, где это возможно, лучше ссылаться на официальную документацию. Много раз я сталкиваюсь с такими случайными ресурсами с ошибками или неясными объяснениями, которые только еще больше запутывают новичков. Если у вас есть какая-либо конкретная принадлежность к этому сайту, вы должны четко указать это в своем ответе, иначе это может показаться спамом

2. @Tomerikoo хм, ну, это было первое, что пришло мне в голову, когда я быстро поискал в Google. Я также подумал, что это будет легче понять по сравнению с официальной документацией.

3. Проще не всегда означает лучше. Вы бы предпочли, чтобы я объяснил вам о двигателе вашего автомобиля или сертифицированном механике? Я мог бы хорошо объяснить, но ничего не знаю о движках… Буквально вчера я столкнулся с вопросом здесь от новичка, который цитировал такой сайт с совершенно вводящими в заблуждение и ложными утверждениями. Если это не официально — нет никакой гарантии, что то, что вы читаете, является правдой…

4. @Tomerikoo это полностью зависит от контекста вопроса. Если я спрошу вас, как считывать некоторые данные из базы данных, и вы объясните всю архитектуру базы данных и то, как она была реализована, и всю ее историю с начала 1970 года, мне это не будет полезно. Кстати, я добавил ссылку на официальную документацию, так что расслабьтесь.

5. @WinnyDaPoo вроде как, он хранит все объекты вершин и ребер и их свойства. тем не менее, я предлагаю вам перейти к правильному руководству, добавив пример выше в разделе комментариев, который может помочь