< Summary

Information
Class: LeetCode.Algorithms.MinimumTimeToVisitCellInGrid.MinimumTimeToVisitCellInGridPriorityQueue
Assembly: LeetCode
File(s): D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\MinimumTimeToVisitCellInGrid\MinimumTimeToVisitCellInGridPriorityQueue.cs
Line coverage
97%
Covered lines: 43
Uncovered lines: 1
Coverable lines: 44
Total lines: 88
Line coverage: 97.7%
Branch coverage
96%
Covered branches: 25
Total branches: 26
Branch coverage: 96.1%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
MinimumTime(...)96.15%262697.67%

File(s)

D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\MinimumTimeToVisitCellInGrid\MinimumTimeToVisitCellInGridPriorityQueue.cs

#LineLine coverage
 1// --------------------------------------------------------------------------------
 2// Copyright (C) 2026 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.MinimumTimeToVisitCellInGrid;
 13
 14/// <inheritdoc />
 15public sealed class MinimumTimeToVisitCellInGridPriorityQueue : IMinimumTimeToVisitCellInGrid
 16{
 117    private static readonly IReadOnlyCollection<(int Row, int Column)> Directions = [(-1, 0), (1, 0), (0, -1), (0, 1)];
 18
 19    /// <summary>
 20    ///     Time complexity - O(m * n log m *n)
 21    ///     Space complexity - O(m * n)
 22    /// </summary>
 23    /// <param name="grid"></param>
 24    /// <returns></returns>
 25    public int MinimumTime(int[][] grid)
 326    {
 327        if (grid[0][1] > 1 && grid[1][0] > 1)
 128        {
 129            return -1;
 30        }
 31
 232        var rowsCount = grid.Length;
 233        var columnsCount = grid[0].Length;
 34
 235        var priorityQueue = new PriorityQueue<(int Row, int Column, int Time), int>();
 36
 237        priorityQueue.Enqueue((0, 0, 0), 0);
 38
 239        var seen = new bool[rowsCount, columnsCount];
 40
 241        seen[0, 0] = true;
 42
 1243        while (priorityQueue.Count > 0)
 1244        {
 1245            var (row, column, time) = priorityQueue.Dequeue();
 46
 12647            foreach (var direction in Directions)
 4648            {
 4649                var targetRow = row + direction.Row;
 4650                var targetColumn = column + direction.Column;
 51
 4652                if (targetRow < 0 ||
 4653                    targetRow >= rowsCount ||
 4654                    targetColumn < 0 ||
 4655                    targetColumn >= columnsCount ||
 4656                    seen[targetRow, targetColumn])
 3257                {
 3258                    continue;
 59                }
 60
 1461                var targetTime = time + 1;
 62
 1463                if (grid[targetRow][targetColumn] > targetTime)
 464                {
 465                    var waitTime = 0;
 66
 467                    if ((grid[targetRow][targetColumn] - targetTime) % 2 != 0)
 268                    {
 269                        waitTime = 1;
 270                    }
 71
 472                    targetTime = grid[targetRow][targetColumn] + waitTime;
 473                }
 74
 1475                if (targetRow == rowsCount - 1 && targetColumn == columnsCount - 1)
 276                {
 277                    return targetTime;
 78                }
 79
 1280                seen[targetRow, targetColumn] = true;
 81
 1282                priorityQueue.Enqueue((targetRow, targetColumn, targetTime), targetTime);
 1283            }
 1084        }
 85
 086        return -1;
 387    }
 88}