אפר.24

תפוחים רקובים

תפוחים רקובים

נתון מערך עם דו מימדי עם ערכים אפשריים: 0 - מקום ריק 1 - תפוח טרי 2 - תפוח רקוב כל דקה תפוח טרי שהיה במגע עם תפוח רקוב הופך להיות גם רקוב. כמה דקות צריכים לעבור עד שכל התפוחים יהיו רקובים. אם זה לא אפשרי - יש להחזיר 1-.

  1. public int ApplesRotting(int[][] grid) {
  2. int minutes = 0;
  3. bool isRottenCreated = true;
  4.  
  5. while (isRottenCreated) {
  6. bool[,] visited = new bool[grid.Length, grid[0].Length];
  7. isRottenCreated = false;
  8. for (int row = 0; row < grid.Count(); row++) {
  9. for (int apple = 0; apple < grid[0].Count(); apple++) {
  10. if (grid[row][apple] == 2 && !visited[row, apple]) {
  11. bool created = setRottens(grid, row, apple, visited);
  12. isRottenCreated = isRottenCreated ? isRottenCreated : created;
  13. }
  14. }
  15. }
  16. if (isRottenCreated) minutes++;
  17. }
  18. return isFreshExists(grid) ? -1 : minutes;
  19. }
  20.  
  21. private bool setRottens(int[][] grid, int x, int y, bool[,] visited) {
  22. int[,] directions = new int[,] { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
  23. bool isRottenCreated = false;
  24. for (int i = 0; i < directions.GetLength(0); i++) {
  25. int newx = x + directions[i, 0];
  26. int newy = y + directions[i, 1];
  27.  
  28. if (newx >= 0 && newx < grid.Length && newy >= 0 && newy < grid[0].Length && grid[newx][newy] == 1 && !visited[newx, newy]) {
  29. grid[newx][newy] = 2;
  30. isRottenCreated = true;
  31. visited[newx, newy] = true;
  32. }
  33. }
  34. return isRottenCreated;
  35. }
  36. private bool isFreshExists(int[][] grid) {
  37. for (int row = 0; row < grid.Count(); row++) {
  38. for (int orange = 0; orange < grid[0].Count(); orange++) {
  39. if (grid[row][orange] == 1)
  40. return true;
  41. }
  42. }
  43. return false;
  44. }


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

תגובות(0)

השאירו תגובה

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

תגובה