< Summary

Information
Class: LeetCode.Algorithms.FindMinimumTimeToReachLastRoom2.FindMinimumTimeToReachLastRoom2PriorityQueue
Assembly: LeetCode
File(s): D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\FindMinimumTimeToReachLastRoom2\FindMinimumTimeToReachLastRoom2PriorityQueue.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: 23
Total branches: 24
Branch coverage: 95.8%
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.83%242497.29%

File(s)

D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\FindMinimumTimeToReachLastRoom2\FindMinimumTimeToReachLastRoom2PriorityQueue.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.FindMinimumTimeToReachLastRoom2;
 13
 14/// <inheritdoc />
 15public class FindMinimumTimeToReachLastRoom2PriorityQueue : IFindMinimumTimeToReachLastRoom2
 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)
 326    {
 327        var n = moveTime.Length;
 328        var m = moveTime[0].Length;
 29
 330        var visited = new int[n, m];
 31
 1832        for (var i = 0; i < n; i++)
 633        {
 4434            for (var j = 0; j < m; j++)
 1635            {
 1636                visited[i, j] = int.MaxValue;
 1637            }
 638        }
 39
 340        visited[0, 0] = 0;
 41
 342        var priorityQueue = new PriorityQueue<(int X, int Y, int Step, int Time), int>();
 43
 344        priorityQueue.Enqueue((0, 0, 0, 0), 0);
 45
 1646        while (priorityQueue.Count > 0)
 1647        {
 1648            var item = priorityQueue.Dequeue();
 49
 1650            if (item.X == n - 1 && item.Y == m - 1)
 351            {
 352                return item.Time;
 53            }
 54
 14355            foreach (var direction in Directions)
 5256            {
 5257                var targetX = item.X + direction.X;
 5258                var targetY = item.Y + direction.Y;
 59
 5260                if (targetX < 0 || targetX >= n || targetY < 0 || targetY >= m)
 2261                {
 2262                    continue;
 63                }
 64
 3065                var targetTime = Math.Max(item.Time, moveTime[targetX][targetY]) + (item.Step % 2 == 0 ? 1 : 2);
 66
 3067                if (targetTime >= visited[targetX, targetY])
 1768                {
 1769                    continue;
 70                }
 71
 1372                visited[targetX, targetY] = targetTime;
 73
 1374                priorityQueue.Enqueue((targetX, targetY, item.Step + 1, targetTime), targetTime);
 1375            }
 1376        }
 77
 078        return -1;
 379    }
 80}