2016-04-28 79 views
0
def breadth_first_search(adj_matrix, source_index, end_index) 
    node_queue = [source_index] 
    puts "#{source_index} stored into queue \n" 

    loop do 
    curr_node = node_queue.pop 
    puts "#{curr_node} popped \n" 
    return false if curr_node == nil 
    return true if curr_node == end_index 

    children = (0..adj_matrix.length-1).to_a.select do |i| 
     adj_matrix[curr_node][i] == 1 

    end 

    puts "children: #{children}" 
    node_queue = children + node_queue 
    puts "node_queue: #{node_queue}" 
    end 
end 

我可以理解它在概念上的作用,但實際的語法是我不明白的。孩子們是不是變量是一個用循環存儲元素的數組?子變量數組中的這段代碼是什麼意思?

回答

2

可變children被設置爲可枚舉方法select

select的結果是一個通常被稱爲陣列這需要的塊上的方法。返回值是原始數組的唯一的值,其中所述塊返回一個truthy對象(例如不false,不nil

(0..adj_matrix.length-1)的範圍對象,從0到的adj_matrix長度,其被轉換爲一個數組通過to_a(產生於[0, 1, 2, ...]

然後,該數組被select過濾爲只有其中的值爲adj_matrix[curr_node][i] == 1。所以,如果在指數02節點,等於1

那麼結果將是[0, 2]