【问题标题】:how to write a program to return bfs如何编写返回 bfs 的程序
【发布时间】:2020-04-22 15:35:09
【问题描述】:

我想编写一个带有 3 个参数的 JavaScript 函数:二维数组形式的邻接矩阵、节点数和起始顶点。 函数返回邻接矩阵表示的图的BFS遍历。

function task24(mat,n,v){
let visited=new Array(n)
let queue=[]
let result=[]

while(queue.length!=0){
queue.push(v)
result.push(queue.pop())
for(i=0;i<n;i++){
  visited[i]=0
}
let i=v
visited[i]=1


for(j = 0; j < n; j++) {
if(visited[j] == 0 && Adj[i][j] == 1) {
visited[j] = 1;
queue.push(j)
result.push(j)
i=queue.shift()
}
}
}
return result
}

console.log(task24([[0, 1, 0, 0], [0, 1, 1, 1], [1, 0, 0, 1], [0, 0, 1, 0]],4,2))```

【问题讨论】:

    标签: javascript breadth-first-search adjacency-matrix


    【解决方案1】:

    详情请参见代码 sn-p 中的 cmets。您也可以使用地图替换您访问的数组,如果有一些节点未连接到任何其他节点,可能会更有效。

    function task24(mat,n,v){
      const visited=[], queue=[v], result = [];
      //start from v and v is already in queue, so visited[v] is 1
      visited[v] = 1;
    
      //loop until queue is empty
      while(queue.length>0){
        //remove the node index from queue using shift and push it result
        const curr = queue.shift();
        result.push(curr);
        //check connected nodes
        for(let i = 0; i<mat[curr].length; i++){
          //if a node is connected and has not been seen, mark it as seen and push it to queue
          if(mat[curr][i] === 1 && !visited[i]){
            visited[i] = 1;
            queue.push(i)
          }
        }
      }
      return result
    }
    
    console.log(task24([[0, 1, 0, 0], [0, 1, 1, 1], [1, 0, 0, 1], [0, 0, 1, 0]],4,2))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-03
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      相关资源
      最近更新 更多