Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. class Solution {
  2. public:
  3.  
  4. void setNeighbors(vector<vector<int>>& grid, int x, int y){
  5. // set neighbors to 3 to trigger change
  6. if (x-1 >= 0 && grid[x-1][y] == 1){
  7. grid[x-1][y] = 3;
  8. }
  9. if (x+1 < grid.size() && grid[x+1][y] == 1){
  10. grid[x+1][y] = 3;
  11. }
  12. if (y-1 >= 0 && grid[x][y-1] == 1){
  13. grid[x][y-1] = 3;
  14. }
  15. if (y+1 < grid[0].size() && grid[x][y+1] == 1){
  16. grid[x][y+1] = 3;
  17. }
  18. }
  19.  
  20. int orangesRotting(vector<vector<int>>& grid) {
  21. int minute = 0;
  22. bool allRotten = false;
  23.  
  24. while (!allRotten){
  25. // check if all are rotten
  26. int fresh = 0;
  27.  
  28. for (int i=0; i<grid.size(); i++){
  29. for (int j=0; j<grid[0].size(); j++){
  30. if (grid[i][j] == 1 || grid[i][j] == 3){
  31. fresh++;
  32. }
  33.  
  34. if (grid[i][j] == 2){
  35. setNeighbors(grid, i, j);
  36. }
  37. }
  38. }
  39.  
  40. if (fresh == 0){
  41. allRotten = true;
  42. break;
  43. }
  44.  
  45. // make neighbours rotten from 3
  46. int changes = 0;
  47. for (int i=0; i<grid.size(); i++){
  48. for (int j=0; j<grid[0].size(); j++){
  49. if (grid[i][j] == 3){
  50. grid[i][j] = 2;
  51. changes++;
  52. }
  53. }
  54. }
  55.  
  56. /* if nothing changes on the board and some fresh still remaining
  57. return impossible */
  58. if (changes == 0 && fresh > 0){
  59. return -1;
  60. }
  61.  
  62. minute++;
  63. }
  64.  
  65. return minute;
  66. }
  67. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement