现在我的程序接受输入并提供单行输出。该程序基本上使用一个名为network-x的手动安装的python库(它创建和分析图形,并具有许多内置的图论相关功能)。
对于此特定程序,它需要输入如下所示:
6 <-- Order of the graph (i.e the graph has 0 to 5 vertices)
1 2 3 <-- vertices going out from 0
2 <-- vertices going out from 1
3 5 <-- vertices going out from 2
4 <-- vertices going out from 3
5 <-- vertices going out from 4
<-- vertices going out from 5 (no vertices going out from 5)
并返回输出(表示图表有多少个连接组件):
1
输入的另一个例子:
6
3 5
2
4
4
并输出:
2
我的程序的源代码是:
import networkx as nx
import sys
def main():
dag = nx.Graph()
order = int(input())
for i in range (order):
dag.add_node(i)
for j in range(order):
seq = [input()]
for vertex in seq:
vertexList = vertex.split()
for element in vertexList:
dag.add_edge(j,int(element))
j+=1
components = nx.number_connected_components(dag)
print (components)
main()
我目前只是想弄清楚如何让程序同时接受这两个输入并计算2行输出(每行输出每个输入的结果),如下所示:
6
1 2 3
2
3 5
4
5
6
3 5
2
4
4
0 <-- when the the user inputs a zero, the loop terminates
循环结束后输出:
1
2
任何帮助将不胜感激。 如果你想安装network-x库,请访问network-x的github网站:https://networkx.github.io/documentation/latest/install.html
答案 0 :(得分:1)
只需使用循环并将每个结果保存在list
:
def main():
result = []
while 1:
dag = nx.Graph()
order = int(input())
if not order: # check if it's 0
break # end the loop
for i in range (order):
dag.add_node(i)
for j in range(order):
vertexList = input().split() # no need to put this single string into a list
for element in vertexList:
dag.add_edge(j,int(element))
result.append(nx.number_connected_components(dag))
print (result)
我删除了不必要的[input()]
,它生成了一个循环的单元素list
。无需创建循环来访问单个对象。我还使用j += 1
删除了循环结束时的j
,因为所有这一切都是在它从range
对象获取下一个值之前重新分配一个新值。它没有做任何事情。