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 
}
相关推荐
不知名的老吴几秒前
机器学习评价之基础指标
人工智能·算法·机器学习
Felven几秒前
D. Divisible Pairs
算法
源代码杀手1 分钟前
基于ROS2+Gazebo+RIVE的40项计算机视觉前沿机器人项目(含视觉算法原理与源码获取方式)
算法·计算机视觉·机器人
MrZhao4002 分钟前
大模型量化到底在做什么:从浮点数表示到 Qwen FP8 实践
算法
JieE2123 分钟前
LeetCode35. 搜索插入位置:二分查找的基础与细节
javascript·算法
8Qi89 分钟前
LeetCode 188 & 123:股票买卖问题(限制交易次数)—— 联合题解
算法·leetcode·职场和发展·动态规划
KaMeidebaby12 分钟前
卡梅德生物技术快报|细胞周期检测抗原流式分析:参数调试、软件拟合与问题排查
网络·人工智能·python·网络协议·tcp/ip·算法·机器学习
一只齐刘海的猫17 分钟前
【Leetcode】三数之和
数据结构·算法·leetcode
lightqjx18 分钟前
【算法】数据结构_扩展域并查集
数据结构·算法·并查集·扩展域并查集
无忧.芙桃21 分钟前
debug实例与分析(一)
开发语言·c++·算法