BFS在邻接矩阵中的顺序是什么?

问题描述

给出一个邻接矩阵

//@version=4
study("My Script")

f_sec() => security(syminfo.ticker,"D",[high,low,close],lookahead = barmerge.lookahead_on)

bar_date_ts = timestamp(year(time),month(time),dayofmonth(time),0)
is_new_date = change(bar_date_ts)

var float h = na
var float l = na
var float c = na

if (is_new_date)
    [x,y,z] = f_sec()
    h := x
    l := y
    c := z
    
plot(h)
plot(l)
plot(c)

递归地,DFS顺序应该是

int[][] grid = new int[5][5];

反复地,DFS订单将是

//y = Row
//x = Column

//Down
grid[y + 1][x];

//Up
grid[y - 1][x];

//Right
grid[y][x + 1];

//Left
grid[y][x - 1];

解决方法

BFS从某个节点开始,然后遍历所有邻居。

如果我们有一个邻接矩阵,则意味着它将从某行开始并遍历该行的所有列。

遍历该行时,它将在BFS队列中放置更多节点,并且由于我们遍历该行的列,因此队列中的第一个节点将成为第一列中的第一个节点。

所以总的来说,我们可以说我们从某个节点N开始,然后遍历所有其他节点n_1,...,n_n 然后转到n_1并遍历该行中的所有其他节点,并将它们添加到队列中。然后,我们继续到之前添加到队列中的节点的另一行。

总共M个节点,假设我们从grid[0][0]的节点开始

grid[0][0],...,grid[0][M-1]

//Added to the queue grid[0][1],grid[0][2]

grid[1,0],grid[1][M-1]

//Added to the queue grid[1][3],grid[1][4]

grid[2,grid[2][M-1]

以此类推...