< Summary

Information
Class: LeetCode.Algorithms.FindMinimumTimeToReachLastRoom1.FindMinimumTimeToReachLastRoom1PriorityQueue
Assembly: LeetCode
File(s): D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\FindMinimumTimeToReachLastRoom1\FindMinimumTimeToReachLastRoom1PriorityQueue.cs
Line coverage
97%
Covered lines: 37
Uncovered lines: 1
Coverable lines: 38
Total lines: 80
Line coverage: 97.3%
Branch coverage
95%
Covered branches: 21
Total branches: 22
Branch coverage: 95.4%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
MinTimeToReach(...)95.45%222297.29%

File(s)

D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\FindMinimumTimeToReachLastRoom1\FindMinimumTimeToReachLastRoom1PriorityQueue.cs

#LineLine coverage
 1// --------------------------------------------------------------------------------
 2// Copyright (C) 2025 Eugene Eremeev (also known as Yevhenii Yeriemeieiv).
 3// All Rights Reserved.
 4// --------------------------------------------------------------------------------
 5// This software is the confidential and proprietary information of Eugene Eremeev
 6// (also known as Yevhenii Yeriemeieiv) ("Confidential Information"). You shall not
 7// disclose such Confidential Information and shall use it only in accordance with
 8// the terms of the license agreement you entered into with Eugene Eremeev (also
 9// known as Yevhenii Yeriemeieiv).
 10// --------------------------------------------------------------------------------
 11
 12namespace LeetCode.Algorithms.FindMinimumTimeToReachLastRoom1;
 13
 14/// <inheritdoc />
 15public class FindMinimumTimeToReachLastRoom1PriorityQueue : IFindMinimumTimeToReachLastRoom1
 16{
 117    private static readonly (int X, int Y)[] Directions = [(1, 0), (-1, 0), (0, 1), (0, -1)];
 18
 19    /// <summary>
 20    ///     Time complexity - O(n * m * log(n * m))
 21    ///     Space complexity - O(n * m)
 22    /// </summary>
 23    /// <param name="moveTime"></param>
 24    /// <returns></returns>
 25    public int MinTimeToReach(int[][] moveTime)
 826    {
 827        var n = moveTime.Length;
 828        var m = moveTime[0].Length;
 29
 830        var visited = new int[n, m];
 31
 5432        for (var i = 0; i < n; i++)
 1933        {
 19634            for (var j = 0; j < m; j++)
 7935            {
 7936                visited[i, j] = int.MaxValue;
 7937            }
 1938        }
 39
 840        visited[0, 0] = 0;
 41
 842        var priorityQueue = new PriorityQueue<(int X, int Y, int Time), int>();
 43
 844        priorityQueue.Enqueue((0, 0, 0), 0);
 45
 6046        while (priorityQueue.Count > 0)
 6047        {
 6048            var item = priorityQueue.Dequeue();
 49
 6050            if (item.X == n - 1 && item.Y == m - 1)
 851            {
 852                return item.Time;
 53            }
 54
 57255            foreach (var direction in Directions)
 20856            {
 20857                var targetX = item.X + direction.X;
 20858                var targetY = item.Y + direction.Y;
 59
 20860                if (targetX < 0 || targetX >= n || targetY < 0 || targetY >= m)
 6061                {
 6062                    continue;
 63                }
 64
 14865                var targetTime = Math.Max(item.Time, moveTime[targetX][targetY]) + 1;
 66
 14867                if (targetTime >= visited[targetX, targetY])
 8168                {
 8169                    continue;
 70                }
 71
 6772                visited[targetX, targetY] = targetTime;
 73
 6774                priorityQueue.Enqueue((targetX, targetY, targetTime), targetTime);
 6775            }
 5276        }
 77
 078        return -1;
 879    }
 80}