מרץ.22

נתיב התא הקצר ביותר

נתיב התא הקצר ביותר

בגריד נתון של אפסים ואחדים, יש לנו שורה ועמודה התחלתיים sr, sc ושורה ועמודה יעד tr, tc. החזירו את אורך הנתיב הקצר ביותר מ-sr, sc ל-tr, tc שהולך לאורך ערכי 1 בלבד. כל מיקום בנתיב, כולל ההתחלה והסוף, חייב להיות 1. כל מיקום עוקב בנתיב חייב להיות מצמיד בארבע הכיוונים למיקום הקודם. מובטח ש-grid[sr][sc] = grid[tr][tc] = 1, והמיקומים ההתחלתי והיעד שונים. אם המשימה בלתי אפשרית, החזירו -1. Time Complexity = O(N), Space O(N)

  1. public static int ShortestCellPath(int[,] grid, int sr, int sc, int tr, int tc)
  2. {
  3. int rows = grid.GetLength(0);
  4. int cols = grid.GetLength(1);
  5. var visited = new bool[rows, cols];
  6. var queue = new Queue<(int, int, int)>();
  7. queue.Enqueue((sr, sc, 0));
  8. visited[sr, sc] = true;
  9. int[,] directions = new int[,] { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
  10. while (queue.Count > 0)
  11. {
  12. var (row, col, steps) = queue.Dequeue();
  13. if (row == tr && col == tc)
  14. {
  15. return steps;
  16. }
  17.  
  18. for (int i = 0; i < directions.GetLength(0); i++)
  19. {
  20. int nRow = row + directions[i, 0];
  21. int nCol = col + directions[i, 1];
  22. // Check if the new position is within bounds, is a 1, and not visited
  23. if (nRow >= 0 && nRow < rows && nCol >= 0 && nCol < cols && grid[nRow, nCol] == 1 && !visited[nRow, nCol])
  24. {
  25. queue.Enqueue((nRow, nCol, steps + 1));
  26. visited[nRow, nCol] = true;
  27. }
  28. }
  29. }
  30.  
  31. return -1;
  32. }
  33.  
  34. static void Main(string[] args)
  35. {
  36. int[,] grid = {
  37. {1, 1, 1, 1},
  38. {0, 0, 0, 1},
  39. {1, 1, 1, 1}
  40. };
  41. int sr = 0, sc = 0, tr = 2, tc = 0;
  42. int result = ShortestCellPath(grid, sr, sc, tr, tc);
  43. Console.WriteLine($"Shortest path length: {result}");
  44. }


תגיות:
שתף את הסיפור הזה:

תגובות(0)

השאירו תגובה

קפטצ'ה לא מתאימה

תגובה