leetcode算法题--找出最安全路径

原题链接:https://leetcode.cn/problems/find-the-safest-path-in-a-grid/description/

go 复制代码
func maximumSafenessFactor(grid [][]int) int {
    n := len(grid)
    type pair struct {
        x int
        y int
    }
    p := make([]pair, 0)
    dis := make([][]int, n)
    for i := range dis {
        dis[i] = make([]int, n)
        for j := range dis[i] {
            if grid[i][j] == 1 {
               p = append(p, pair{i, j}) 
            } else {
                dis[i][j] = -1
            }
        }
    }

    dirs := [][]int{{0, -1}, {1, 0}, {0, 1}, {-1, 0}};
    groups := [][]pair{p}
    for len(p) != 0 {
        tmp := p
        p = make([]pair, 0) 
        for _, pa := range tmp {
            for _, dir := range dirs {
                i, j := pa.x, pa.y
                x := i + dir[0] 
                y := j + dir[1]
                if x >= 0 && x < n && y >= 0 && y < n && dis[x][y] < 0 {
                    p = append(p, pair{x, y})
                    dis[x][y] = len(groups)
                }
            } 
        } 
        groups = append(groups, p)
    }

    // 并查集
    m := n * n - 1 
    fa := make([]int, m + 1)
    for i := 0; i <= m; i ++ {
        fa[i] = i
    }
    var find func(x int) int
    find = func(x int) int {
        if fa[x] != x {
            fa[x] = find(fa[x])
        }
        return fa[x]
    }

    nn := len(groups) 
    for i := nn - 2; i > 0; i -- {
       pairs := groups[i] 
       for _, pair := range pairs {
            for _, dir := range dirs {
                i, j := pair.x, pair.y
                x := i + dir[0] 
                y := j + dir[1]
                if x >= 0 && x < n && y >= 0 && y < n && dis[x][y] >= dis[i][j] {
                    fa[find(x*n+y)] = find(i*n+j)
                }
            } 
            if find(0) == find(m) {
                return i 
            }
        }
    } 

    return 0 
}
相关推荐
梓䈑2 小时前
【算法题攻略】BFS 解决FloodFill 算法、最短路问题、多源BFS 和 拓扑排序
c++·算法·宽度优先
Adios7944 小时前
设置交集大小至少为2
数据结构·算法·leetcode
来一碗刘肉面11 小时前
栈的应用(表达式求值)
数据结构·算法
xiaowang1234shs12 小时前
怪兽轻断食技术深度测评:从断食计时引擎到AI识别算法的工程实践解析
数据库·人工智能·算法·macos·机器学习·p2p·visual studio
小果因子实验室12 小时前
量化研究--策略迁移算法1研究
算法
Web极客码13 小时前
如何用三段式确定性剪枝,为 LLM Agent 砍掉 35% 的 Token 成本?
服务器·人工智能·算法·机器学习
程序猿乐锅13 小时前
【数据结构与算法 | 第六篇】力扣1109,1094差分数组
java·算法·leetcode
wabs66613 小时前
关于图论【广度优先搜索的理论基础】
算法·图论·宽度优先
孤魂23313 小时前
逻辑回归算法
算法·机器学习·逻辑回归