immuntasir

UVA 10653

Sep 10th, 2015
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 KB | None | 0 0
  1. #include <cstdio>
  2. #include <queue>
  3. using namespace std;
  4. typedef struct node {
  5. int x,y;
  6. } node_t;
  7. int graph[1010][1010], visited[1010][1010], level[1010][1010];
  8. int main() {
  9.  
  10. int row, column;
  11. while (scanf("%d %d", &row, &column)) {
  12. if (!row && !column) return 0;
  13.  
  14. int num,i,j;
  15. for (i=0;i<row; i++)
  16. for (j=0; j<column; j++) {
  17. graph[i][j] = 0;
  18. visited[i][j] = 0;
  19. }
  20.  
  21. scanf("%d", &num);
  22.  
  23. while (num--) {
  24. int r, a,b;
  25. scanf("%d %d", &r, &b);
  26. while (b--) {
  27. scanf("%d", &a);
  28. graph[r][a] = -1;
  29. }
  30. }
  31.  
  32. node_t src, dst;
  33. scanf("%d %d %d %d", &src.x, &src.y, &dst.x, &dst.y);
  34.  
  35. queue <node_t> myq;
  36. myq.push(src);
  37. level[src.x][src.y] = 0;
  38.  
  39. while (!myq.empty()) {
  40. int cx = myq.front().x;
  41. int cy = myq.front().y;
  42. if (cx == dst.x && cy == dst.y) break;
  43. node_t cur;
  44. myq.pop();
  45. visited[cx][cy] = 1;
  46. if (cx+1<column) {
  47. if (graph[cx+1][cy] == 0 && !visited[cx+1][cy]) {
  48. cur.x = cx+1;
  49. cur.y = cy;
  50. myq.push(cur);
  51. level[cur.x][cur.y] = level[cx][cy] + 1;
  52. visited[cur.x][cur.y] = 1;
  53. }
  54. }
  55. if (cx-1 >=0) {
  56. if (graph[cx-1][cy] == 0&& !visited[cx-1][cy]) {
  57. cur.x = cx-1;
  58. cur.y = cy;
  59. myq.push(cur);
  60. level[cur.x][cur.y] = level[cx][cy] + 1;
  61. visited[cur.x][cur.y] = 1;
  62. }
  63. }
  64. if (cy+1 < row){
  65. if (graph[cx][cy+1] == 0&& !visited[cx][cy+1]) {
  66. cur.x = cx;
  67. cur.y = cy+1;
  68. myq.push(cur);
  69. level[cur.x][cur.y] = level[cx][cy] + 1;
  70. visited[cur.x][cur.y] = 1;
  71. }
  72. }
  73. if (cy-1 >= 0) {
  74. if (graph[cx][cy-1] == 0&& !visited[cx][cy-1]) {
  75. cur.x = cx;
  76. cur.y = cy-1;
  77. myq.push(cur);
  78. level[cur.x][cur.y] = level[cx][cy] + 1;
  79. visited[cur.x][cur.y] = 1;
  80. }
  81. }
  82. }
  83. printf("%d\n", level[dst.x][dst.y]);
  84. }
  85. return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment