有向图BFS

https://leetcode.cn/problems/detonate-the-maximum-bombs/description/

func maximumDetonation(bombs [][]int) int {
    n := len(bombs)
    g := make([][]int, n)
    for i := range g {
        g[i] = make([]int, n)
        for j := range g[i] {
            g[i][j] = 0
        }
    }
    for i := 0; i < n - 1; i++ {
        for j := i + 1; j < n; j++ {
            atob, btoa := adjacent(bombs[i], bombs[j])
            if atob {
                g[i][j] = 1
            }
            if btoa {
                g[j][i] = 1
            }
        }
    }

    ans := 1
    queue := make([]int, 0)

    for i := 0; i < n; i++ {
        vis := make([]bool, n)
        vis[i] = true
        queue = append(queue, i)
        cnt := 1
        for len(queue) > 0 {
            node := queue[0]
            queue = queue[1:]
            for j, val := range g[node] {
                if val == 1 && !vis[j] {
                    cnt++
                    vis[j] = true
                    queue = append(queue, j)
                }
            }
        }
        ans = max(cnt, ans)
    }
    return ans
}


func adjacent(bomb1, bomb2 []int) (bool, bool) {
    x1, y1, r1 := bomb1[0], bomb1[1], bomb1[2]
    x2, y2, r2 := bomb2[0], bomb2[1], bomb2[2]
    dis := (x2-x1) * (x2-x1) + (y2-y1) * (y2-y1)
    atob, btoa := false, false
    if r1 * r1 >= dis {
        atob = true
    }
    if r2 * r2 >= dis {
        btoa = true
    }
    return atob, btoa
}

在有向图的bfs中,注意将vis数组设置在for循环中。在无向图中,vis定义在外面。(?

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值