我是编程新手,所以如果有些事情/细节对你来说似乎微不足道,我很抱歉。
所以,我有一个JSON文件,其中有一组点(或节点),其中每个节点有两个坐标和一个ID。我也有一个“限制”(即如果两点之间的距离小于或等于这个限制,则说这两个点是连接的,给我一个图表)。我想在python中写一个程序告诉我,如果我给它两点,如果这些点是直接或间接连接的。
JSON文件如下所示:
{
"limit": 32.0,
"nodes": [{
"y": 9.0,
"x": 65.0,
"id": 0
},
{
"y": 44.6,
"x": 3.4,
"id": 1
},
{
"y": 1.5,
"x": 98.9,
"id": 2
},
{
"y": 2.67,
"x": 7.0,
"id": 3
},
{
"y": 3.0,
"x": 65.0,
"id": 4
}
}]
}
因此,我创建了一个名为Nodes的类,并且从JSON文件中我设法创建了一组节点并获得了我的“限制”。
我现在的问题是,我被困住了。我不知道该怎么办。
从我进行的互联网搜索中,我发现我必须使用“深度优先搜索”算法来解决我的问题。但是我在实现它时遇到了一些麻烦,因为我发现大多数例子都使用图形(边缘等)来实现算法,而我只有节点。
所以,如果你能给我一个提示,那就太好了,谢谢。
答案 0 :(得分:0)
我建议使用networkx
作为图库。
然后,以下代码应该完成这项工作。在最后一行中,只需插入所需的ID。
import networkx as nx
import json
def dist(u,v):
return (u['x']-v['x'])**2 + (u['y']-v['y'])**2
input_file = open('input.txt','r')
data = json.load(input_file)
input_file.close()
G = nx.Graph()
for v in data['nodes']:
G.add_node(v['id'])
G.nodes[v['id']].update(v)
for i in range(len(G.nodes)):
for j in range(i):
if dist(G.node[i], G.node[j]) < data['limit']:
G.add_edge(G.node[i], G.node[j])
print(nx.has_path(G, 1, 2))