Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. bool mouseEscapeEx(char[][] board, int steps)
  2. {
  3. var watch = System.Diagnostics.Stopwatch.StartNew();
  4. var R = board.Length;
  5. var C = board[0].Length;
  6. var startFromR = board.Select((x, i) => x.Any(e => e == '&') ? i : 0)
  7. .Max();
  8. var startFromC = board[startFromR].Select((x, i) => x == '&' ? i : 0)
  9. .Max();
  10. var cookieR = board.Select((x, i) => x.Any(e => e == 'O') ? i : 0)
  11. .Max();
  12. var cookieC = board[cookieR].Select((x, i) => x == 'O' ? i : 0)
  13. .Max();
  14. if(startFromR == cookieR & startFromC == cookieC) return false;
  15. int fR = cookieR;
  16. int fC = cookieC;
  17. var Q = new Queue < int[] > ();
  18. bool reached = false;
  19. var visited = new int[R][];
  20. for(int k = 0; k < R; k++) visited[k] = new int[C];
  21. var dR = new []
  22. {
  23. -1
  24. , 1
  25. , 0
  26. , 0
  27. };
  28. var dC = new []
  29. {
  30. 0
  31. , 0
  32. , 1
  33. , -1
  34. };
  35. visited[startFromR][startFromC] = 1;
  36. Q.Enqueue(new []
  37. {
  38. startFromR
  39. , startFromC
  40. , steps
  41. , 0
  42. });
  43. while(Q.Count > 0)
  44. {
  45. var RQ = Q.Dequeue();
  46. if(RQ[2] > 0)
  47. for(int i = 0; i < 4; i++)
  48. {
  49. int rr = RQ[0] + dR[i];
  50. int cc = RQ[1] + dC[i];
  51. if(rr < 0 || cc < 0) continue;
  52. if(rr >= R || cc >= C) continue;
  53. if(board[rr][cc] == 'X') continue;
  54. if(visited[rr][cc] != 0) continue;
  55. if(board[rr][cc] == 'O'){
  56. reached = true;
  57. break;
  58. }
  59. var Qs = board[rr][cc] == 'C' ? new []
  60. {
  61. rr
  62. , cc
  63. , steps
  64. , 1
  65. } : new []
  66. {
  67. rr
  68. , cc
  69. , RQ[2] - 1
  70. , 0
  71. };
  72. if(visited[rr][cc] == 0)
  73. {
  74. visited[rr][cc] = Qs.Last();
  75. Q.Enqueue(Qs);
  76. }
  77. }
  78. }
  79. watch.Stop();
  80. Console.Write($"Time: {watch.Elapsed.TotalMilliseconds} ms");
  81. return reached;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement