Python - Dijkstra 算法
我需要用 Python 实现 Dijkstra 算法。但是,我必须使用 2D 数组来保存三条信息 - 前身、长度和未访问/已访问。 我知道在 C 中可以使用 Struct,尽管我不知道如何在 Python 中做类似的事情,有人告诉我这是可能的,但说实话我不知道
I need to implement Dijkstra's Algorithm in Python. However, I have to use a 2D array to hold three pieces of information - predecessor, length and unvisited/visited.
I know in C a Struct can be used, though I am stuck on how I can do a similar thing in Python, I am told it's possible but I have no idea to be honest
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
为它创建一个类。
或者使用 collections.namedtuple,它对于保存没有自己的行为但命名成员的类似结构体的复合类型特别酷:
XXX = collections.namedtuple('XXX', 'predecessor lengthvisited')
。使用
XXX(前驱、长度、访问)
创建一个。Create a class for it.
Or use collections.namedtuple, which is particular cool for holding struct-like compound types without own behaviour but named members:
XXX = collections.namedtuple('XXX', 'predecessor length visited')
.Create one with
XXX(predecessor, length, visited)
.如上所述,您可以使用对象的实例。
作者用 python 编写了一个相当令人信服的 Dijkstras 的 python 实现。
请注意,这些信息“保存”在他通过调用 Algorithms.Entry() 构造的对象中。 Entry 是一个类,定义如下:
self.known、self.distance... 是这些信息。他没有在构造函数(init)中明确设置这些,而是稍后设置它们。在 Python 中,您可以使用点表示法访问属性。例如:myObject=Entry()。 myObject.known、myObject.distance...它们都是公共的。
As mentioned above, you can use an instance of an object.
This author has a pretty convincing python implementation of Dijkstras in python.
Notice those pieces of information are 'held' in the object he is constructing by calling Algorithms.Entry(). Entry is a class and is defined like this:
The self.known, self.distance... are those pieces of information. He does not set these explicit in the constructor (init) but sets them later. In Python you can access attributes with dot notation. for examle: myObject= Entry(). the myObject.known, myObject.distance... they are all public.
将这些信息封装在一个 Python 对象中就可以了。
Encapsulate that information in a Python object and you should be fine.
或者您可以简单地在二维数组中使用元组或字典:
Or you can simply use tuples or dictionaries inside your 2d array:
Python 是面向对象的语言。因此,可以将其视为从 C 中的结构迁移到 C++ 中的类。您也可以在 Python 中使用相同的类结构。
Python is object oriented language. So think of it like moving from Structs in C to Classes of C++. You can use the same class structure in Python as well.