我正在使用NetworkX实现DiGraph。源是红色节点。我需要确定从具有两个邻居的红色节点(以“流向”)开始的第一个节点。如果我遍历所有节点 - 看起来像ramdom。如果有人能帮忙,会很棒!识别NetworkX中具有两个邻居的源节点之后的第一个节点DiGraph
回答
可以使用successors
方法。如果您有向图实例被称为G,和你的红节点具有索引0,那么你可以采取breadth first search的做法是这样的:
import networkx as nx
# Construct graph from example image, all edges pointing away from source
G = nx.DiGraph()
G.add_path([0,1,2,3,4])
G.add_path([1,5])
G.add_path([3,6])
G.add_path([2,7,8])
# Find first with 2 neighbors
neighbors = G.successors(0)
for n in neighbors:
nneighbors = set(G.successors(n))
if len(nneighbors) == 2:
print "Found", n
break
neighbors.extend(nneighbors)
的neighbors
方法是可以互换的,在networkx successors
一个有向图。如果您还想计算每个节点的初始边缘,请在计数时将G.predecessors(n)
添加到nneighbors
集合中,但请记住在扩展neighbors
时不要将它们包括在集合中。代码然后是:
# Find first with 2 neighbors
neighbors = G.successors(0)
for n in neighbors:
if len(G.predecessors(n)+G.successors(n)) == 2:
print "Found", n
break
nneighbors = set(G.successors(n))
neighbors.extend(nneighbors)
对于DiGraph,如果使用明确的'后继者'和'前辈'版本,那么混淆就会少得多...... –
谢谢,您说得对。我会更新我的答案。 –
这将是值得在你的回答某处使用“广度优先搜索”的话。 – Joel
- 1. NetworkX DiGraph按节点创建子图(DiGraph)
- 2. d3工具提示中的第一个节点邻居
- 3. XSLT - 识别节点之后的另一个节点
- 4. 节点的2-hub邻居中的节点具有零度?
- 5. 得到一个节点的邻居之间的所有关系
- 6. 找到一个节点的邻居的邻居 - Python的
- 7. GEt DSR邻居节点
- 8. 在两个相同节点的第二个节点中插入XML节点
- 9. networkx:具有一致节点放置的多个图形
- 10. R中图节点的二阶邻居
- 11. 在图中找到具有相似邻居的节点
- 12. 如何识别DOM节点邻近度
- 13. 识别XML中的某个节点
- 14. 将具有多个子节点的Firebase节点复制到另一个节点
- 15. 获取节点值第一个节点
- 16. 使用networkx绘制两个节点之间的多条边
- 17. 下一个节点*下一个和节点*有区别吗?
- 18. 如何计算两个非邻居节点之间的总链路成本?
- 19. 向邻居节点发送节点的信誉值
- 20. Cypher返回一个节点与给定的邻居
- 21. 哪个XPath可以识别具有共同兄弟的节点?
- 22. 在链表中插入两个节点之间的节点
- 23. 获取两个节点之间的中间节点neo4j
- 24. xpath在scrapy中的两个节点之间选择节点0.24.5
- 25. 使用NetworkX计算2个节点之间的点击时间
- 26. 如何在HBox中的两个其他节点之间添加一个节点?
- 27. 获取具有随机(可选)子节点的第一个(特定)节点
- 28. 按属性选择一个具有子节点的XML节点
- 29. 获取两个节点之间的节点的子图?
- 30. 找到两个节点之间的隐藏节点 - 图 - java的
你不需要迭代所有的节点,你开始在源和递归遍历后继,直到你找到你想要的。 –