【发布时间】:2020-11-19 07:50:41
【问题描述】:
我正在尝试实施 Prim 算法,但不断收到此错误,我不知道该怎么办。这两个文件都是 .txt 文件,第一个(分配给 matrizA 的那个)包含一个邻接矩阵,而第二个是一个顶点名称列表,每行一个。
import networkx as nx
def peso(matrizA, u,v):
return matrizA[u][v]
def adjac(matrizA, u):
L = []
for x in range(len(matrizA)):
L.insert(0,x)
return L
def extraiMin(Q):
q = Q[0]
Q.remove(Q[0])
return q
def decKey(Q, K):
for i in range(len(Q)):
for j in range(len(Q)):
if K[Q[i]]< K[Q[j]]:
s = Q[i]
Q[i] = Q[j]
Q[j] = s
def prim(vList, matrizA, r):
u = 0
v = 0
P = [None]*len(vList)
K = [999999999]*len(vList)
Q=[0]*len(V)
for u in range(len(Q)):
Q[u] = vList[u]
K[r] = 0
decKey(Q, K)
while len(Q) > 0:
u = extraiMin(Q)
Adj = adjac(matrizA, u)
for v in Adj:
w = peso(matrizA, u)
if Q.count(v) > 0 and w < K[v]:
P[v] = u
K[v] = w
decKey(Q, K)
return P
matrizA = open("C:\TrabalhoGrafos\Prim\MatrizAdjacencia_Pesos.txt", 'rb')
V = open("C:\TrabalhoGrafos\Prim\AirportList_Vertices.txt", 'rb')
P = prim(V, matrizA, 0)
print (P)
PyCharm 显示的错误是这样的:
Traceback(最近一次通话最后一次):
文件“C:/TrabalhoGrafos/Prim/Prim.py”,第 74 行,在
P = prim(V, matrizA, 0)
文件“C:/TrabalhoGrafos/Prim/Prim.py”,第 40 行,在 prim 中
P = [无]*len(vList)
TypeError: '_io.BufferedReader' 类型的对象没有 len()
我保留了其他功能
【问题讨论】:
-
你刚刚用
V = open("C:\TrabalhoGrafos\Prim\AirportList_Vertices.txt", 'rb')打开了文件。而def prim(vList, matrizA, r)需要一个列表。这是错误的,因为您将文件对象传递给 prim()。您应该将这些行作为列表读取并将其传递给 prim()....
标签: python python-3.x