Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. //题目是假想你手里有一份博物馆地图(square matrix of char),G代表guard #代表locked room,. 代表empty room。
  2. //计算每一个空房间,最近的guard 到他需要多久(移动一格消耗一个单位时间,只能横向竖向移动,locked room是打不开的)。try to do it in one pass
  3.  
  4.  
  5. public static int[][] DistToGuard(char[][] matrix) {
  6. Queue<Pair> queue = new Queue<Pair>();
  7. int m = matrix.length;
  8. int n = matrix[0].length;
  9. int[][] dist = new int[m][n];
  10. for (int i = 0; i < m; i++) {
  11. for (int j = 0; j < n; j++) {
  12. if (matrix[i][j] == 'G') {
  13. queue.offer( new Pair(i, j) );
  14. dist[i][j] = 0;
  15. } else {
  16. dist[i][j] = Integer.MAX_VALUE;
  17. }
  18. }
  19. }
  20.  
  21. while (!queue.isEmpty()) {
  22. Pair p = queue.poll();
  23. int i = p.left;
  24. int j = p.right;
  25. if (i + 1 < m && matrxi[i + 1, j] == '.' && dist[i+1][j] > dist[i][j] + 1) {
  26. dist[i+1][j] = dist[i][j] + 1;
  27. queue.offer(new Pair(i + 1, j))
  28. }
  29. if (j + 1 < m && matrxi[i, j + 1] == '.' && dist[i][j+1] > dist[i][j] + 1) {
  30. dist[i][j+1] = dist[i][j] + 1;
  31. queue.offer(new Pair(i, j + 1))
  32. }
  33. if (i - 1 >= 0 && matrxi[i - 1, j] == '.' && dist[i-1][j] > dist[i][j] + 1) {
  34. dist[i-1][j] = dist[i][j] + 1;
  35. queue.offer(new Pair(i - 1, j))
  36. }
  37. if (j - 1 >= 0 && matrxi[i, j - 1] == '.' && dist[i][j-1] > dist[i][j] + 1) {
  38. dist[i][j-1] = dist[i][j] + 1;
  39. queue.offer(new Pair(i, j - 1))
  40. }
  41. }
  42.  
  43. return dist;
  44.  
  45. }
  46.  
  47. private static class Pair {
  48. int left;
  49. int right;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement