【发布时间】:2014-06-02 18:13:03
【问题描述】:
我正在尝试编辑找到here 的算法。
我希望从文件中加载邻接矩阵(文件的格式对我来说并不重要,它可以是这样的[0,1,1,0] 或只是0110)和G = file.read().split("\n")
但是,我收到错误 no implicit conversion of Fixnum into String (TypeError)
而且我已经知道我需要将此字符串转换为整数,但如何正确执行才能不丢失此 DFS 方法所需的格式?
我想这很容易,但我是 Ruby(和图形:v)的初学者,无法让它工作......
编辑: 所以我用来从文件读取到数组数组的代码是:
def read_array(file_path)
File.foreach(file_path).with_object([]) do |line, result|
result << line.split.map(&:to_i)
end
end
以及我从文件中得到的结果(例如)
01101010
01010101
01010110
10101011
01011111
这是:
=> [[[1101010], [1010101], [1010110], [10101011], [1011111]]]
然而,我需要的是:
=> [[[1,1,0,1,0,1,0], [1,0,1,0,1,0,1], [1,0,1,0,1,1,0], [1,0,1,0,1,0,1,1], [1,0,1,1,1,1,1]]]
这样它就可以与我帖子第一行中提到的算法一起使用(我会在这里复制它,如果它占用太多地方我可以删除它并只留下链接):
G = [0,1,1,0,0,1,1], # A
[1,0,0,0,0,0,0],
[1,0,0,0,0,0,0],
[0,0,0,0,1,1,0],
[0,0,0,1,0,1,1],
[1,0,0,1,1,0,0],
[1,0,0,0,1,0,0] # G
LABLES = %w(A B C D E F G)
def dfs(vertex)
print "#{LABLES[vertex]} " # visited
edge = 0
while edge < G.size
G[vertex][edge] = 0
edge += 1
end
edge = 0
while edge < G.size
if ( G[edge][vertex] != 0 && edge != vertex)
dfs(edge)
end
edge += 1
end
end
dfs(0)
【问题讨论】:
-
您需要提供有关您正在尝试做的事情、您期望发生的事情以及您实际看到的内容的更多详细信息。你能提供一个产生错误的最小代码示例吗?
-
@matt 所以我编辑了帖子,如果我省略了其他内容,请告诉我。基本上我只希望这段代码可以处理从文件加载的任何图形邻接矩阵,而不是硬编码到 .rb 文件中。哦,当我尝试加载包含我想要的“G”的文件时收到的错误。
-
您显示的结果是一个包含单个数组的数组,该数组包含多个数组。这是对的还是错字?换句话说,它应该是
[[1101010], ... [1011111]]而不是[[[1101010], ... [1011111]]]? -
@matt 我错过了 - 但它实际打印的是 [[[101010], ...]]],我猜应该是 [[101010], ... ]],所以我可以简单地将它与提到的功能一起使用。
-
您显示的方法在单独包装的数组中产生结果。您必须将结果包装在另一个数组中。
标签: ruby arrays string algorithm