Python 找到一个特定的;路线;通过网络模拟器

Python 找到一个特定的;路线;通过网络模拟器,python,networking,simulation,simulator,Python,Networking,Simulation,Simulator,我在为一个涉及网络的游戏写东西。在这个游戏中,网络是一个类,每个节点的“连接”格式如下: network.nodes = [router, computer1, computer2] network.connections = [ [1, 2], [0], [0] ] “network.nodes”中的每个迭代与“network.connections”中的每个迭代并行工作,意思是“network.connections[0]”表示“network.nodes[0]”连接到的所有节点。我试图在

我在为一个涉及网络的游戏写东西。在这个游戏中,网络是一个类,每个节点的“连接”格式如下:

network.nodes = [router, computer1, computer2]
network.connections = [ [1, 2], [0], [0] ]
“network.nodes”中的每个迭代与“network.connections”中的每个迭代并行工作,意思是“network.connections[0]”表示“network.nodes[0]”连接到的所有节点。我试图在network类中编写一个简单的函数,用于查找从路由器开始的路由——“network.connections[0]”,然后到特定的“node”。我想得越多,答案似乎就越复杂

在这个相当简单的情况下,它应该返回

[router, computer1]
如果我想找到一条通往“computer1”的路线,我很想看到这一点,但我需要一些能够处理更复杂网络模拟的东西

它基本上是一个计算机网络模拟器。但在这个游戏中,我需要能够准确地知道什么节点可能会通过到达特定目标。
任何帮助都将不胜感激。谢谢。

删除
.nodes
.connections
并将它们像字典一样保存在一个数据结构中,怎么样

network.nodes = {"router": [computer1, computer2],
                 "computer1": [router],
                 "computer2": [router]
                 }
您甚至可以将字符串作为键删除,并使用对象本身:

network.nodes = {router: [computer1, computer2],
                 computer1: [router],
                 computer2: [router]
                 }
这样,如果您需要访问路由器的连接,您可以执行以下操作:

>>>network.nodes[router]
[computer1, computer2]
因为我对你的项目没有一个完整的概述,我不能仅仅给你一个功能来做这件事,但我可以尝试为你指出正确的方向

如果您将网络“地图”构建为一个字典,并且
network.nodes[router]
返回
[computer1,computer2]
,那么接下来您需要做的就是
network.nodes[computer1]
network.nodes[computer2]

在注释中的防火墙示例中,您将重建网络映射以包括防火墙。所以字典应该是这样的:

network.nodes = {router: [firewall, computer2],
                firewall: [computer1]
                computer1: [firewall],
                computer2: [router]
                }

删除
.nodes
.connections
并将它们像字典一样保存在一个数据结构中,怎么样

network.nodes = {"router": [computer1, computer2],
                 "computer1": [router],
                 "computer2": [router]
                 }
您甚至可以将字符串作为键删除,并使用对象本身:

network.nodes = {router: [computer1, computer2],
                 computer1: [router],
                 computer2: [router]
                 }
这样,如果您需要访问路由器的连接,您可以执行以下操作:

>>>network.nodes[router]
[computer1, computer2]
因为我对你的项目没有一个完整的概述,我不能仅仅给你一个功能来做这件事,但我可以尝试为你指出正确的方向

如果您将网络“地图”构建为一个字典,并且
network.nodes[router]
返回
[computer1,computer2]
,那么接下来您需要做的就是
network.nodes[computer1]
network.nodes[computer2]

在注释中的防火墙示例中,您将重建网络映射以包括防火墙。所以字典应该是这样的:

network.nodes = {router: [firewall, computer2],
                firewall: [computer1]
                computer1: [firewall],
                computer2: [router]
                }

事实上,这可能会有所帮助。但这并不能完全解决问题。我可能会接受你的建议,但我仍然需要一个函数,该函数返回某些东西到达特定节点所需的每条路由。例如,如果路由器和“computer1”之间有防火墙,因此路由器和“computer1”没有直接连接,我需要一个程序,可以通过每个节点返回类似于[路由器、防火墙、计算机1]的东西,实际上我可能已经找到了它。这不完全是我想要的答案,但我知道如何用你的建议来解决它,这样它才有效。我来这里寻求帮助的原因是,根据我建立联系的方式,这种联系可能会永远持续下去。所以我需要一个函数,它可以运行所有可能的路径,并返回我所需要的路径。但是使用你的方法,我可以限制一个节点从路由器的跳数。谢谢我很感激。事实上,这可能会有所帮助。但这并不能完全解决问题。我可能会接受你的建议,但我仍然需要一个函数,该函数返回某些东西到达特定节点所需的每条路由。例如,如果路由器和“computer1”之间有防火墙,因此路由器和“computer1”没有直接连接,我需要一个程序,可以通过每个节点返回类似于[路由器、防火墙、计算机1]的东西,实际上我可能已经找到了它。这不完全是我想要的答案,但我知道如何用你的建议来解决它,这样它才有效。我来这里寻求帮助的原因是,根据我建立联系的方式,这种联系可能会永远持续下去。所以我需要一个函数,它可以运行所有可能的路径,并返回我所需要的路径。但是使用你的方法,我可以限制一个节点从路由器的跳数。谢谢我很感激。