美文网首页
广度优先遍历(bfs)

广度优先遍历(bfs)

作者: MoneyRobber | 来源:发表于2019-06-12 18:56 被阅读0次
  • 从图中某个顶点V0出发,并访问此顶点;
  • 从V0出发,访问V0的各个未曾访问的邻接点W1,W2,…,Wk;然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点;
  • 重复步骤2,直到全部顶点都被访问为止

代码中图的结构

code

/// 节点
class Node {
    var visited:Bool = false
    var value:Int = 0
}

/// 广度优先遍历
///
/// - Parameters:
///   - v: 节点数组
///   - e: 边数组
///   - start: 开始点
func bfs(v:[Node],e:[[Int]],start:Int) {
    var queue:Array = [Node]()
    v[start].visited = true
    queue.append(v[start])
    while queue.count != 0 {
        let headNode = queue[0]
        print(headNode.value)
        queue.remove(at: 0)
        
        //遍历对应的数组
        var tmpArray = e[headNode.value]
        for i in 0..<tmpArray.count {
            let ttt = tmpArray[I]
            if ttt == 1,v[i].visited == false {
                v[i].visited = true
                queue.append(v[I])
            }
        }
    }
}
class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let n = 5
        //节点
        var array:Array = [Node]()
        for i in 0..<n {
            let node = Node()
            node.value = I
            array.append(node)
        }
        //边 用二维矩阵表示
        var e = [[Int]]()
        for i in 0..<n {
            var row = [Int]()
            for j in 0..<n {
                if i == j {
                    row.append(0)
                } else {
                    row.append(10000)
                }
            }
            e.append(row)
        }
        e[0][1] = 1;e[0][2] = 1;e[0][3] = 1;
        e[1][0] = 1;e[1][4] = 1;
        e[2][0] = 1;e[2][4] = 1;
        e[3][0] = 1;
        e[4][1] = 1;e[4][2] = 1;
        bfs(v: array, e: e, start: 0)
    }
}

console

0
1
2
3
4

时间复杂度

O(n2),n代表顶点的个数

相关文章

  • 无向图DFS和BFS

    基本结构 DFS深度优先遍历 BFS广度优先遍历 符号图

  • leecode岛屿数量

    题目描述可用解法DFS 深度优先遍历BFS 广度优先遍历算法思路:下列代码用BFS,循环遍历输入的二维列表如果遇到...

  • BFS和DFS

    BFS:广度优先搜索 DFS:深度优先搜索 树的遍历 BFS:A B C D E F G H I DFS: A ...

  • 广度优先遍历(bfs)

    从图中某个顶点V0出发,并访问此顶点; 从V0出发,访问V0的各个未曾访问的邻接点W1,W2,…,Wk;然后,依次...

  • 1.5 二叉树(4)

    二叉树相关问题解题套路 广度优先遍历(BFS:Breath First Search)、深度优先遍历(DFS:De...

  • 搜索问题:广度优先搜索(BFS)、深度优先搜索(DFS)

    广度优先搜索(BFS) 广度优先搜索一层一层地进行遍历,每层遍历都以上一层遍历的结果作为起点,遍历一个距离能访问到...

  • 刷题7 剑指 Offer — DFS

    树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);常见的 DFS : 先序遍历、中序遍历、...

  • 基本数据结构

    一.图二.树 一.图 1.图的遍历: 通过深度优先遍历DFS和广度优先遍历BFS两种方式。深度优先遍历0 1 2 ...

  • 74_图的遍历(BFS)

    关键词:MatrixGraph和ListGraph的选择方式、图的遍历概念、广度优先(BFS)、深度优先(DFS)...

  • 算法-二叉树的遍历实现

    简述 二叉树的遍历分 DFS【深度优先遍历】 和 BFS【广度优先遍历】 两类,其中 DFS 又分为前序遍历,中序...

网友评论

      本文标题:广度优先遍历(bfs)

      本文链接:https://www.haomeiwen.com/subject/tmglfctx.html