Guest User

Untitled

a guest
Aug 9th, 2020
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define rep(i,n) for(int i=0;i<n;i++)
  3. #define dis(a,b) abs(a-b)
  4. using namespace std;
  5. char maze[1001][1001];
  6. int l[1001][1001];
  7. struct pos
  8. {
  9. int x,y;
  10. int distance=-1;
  11. };
  12. struct cmp
  13. {
  14. bool operator()(pos a,pos b)
  15. {
  16. // return 0;
  17. int k=a.distance+l[a.x][a.y],k2=b.distance+l[b.x][b.y];
  18. if(k!=k2)return k>k2;
  19. return l[a.x][a.y]>l[b.x][b.y];
  20. //return<;
  21. }
  22. } ;
  23.  
  24. void astar(int x,int y,int tx,int ty,int t)
  25. {
  26. int move[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
  27. if(maze[x][y]=='X'||maze[tx][ty]=='X')
  28. {
  29. cout<<"ERROR\n";
  30. return;
  31. }
  32. l[x][y]=1;
  33. pos p;
  34. p.x=x;
  35. p.y=y;
  36. p.distance=dis(x,tx)+dis(y,ty);
  37. priority_queue<pos,vector<pos>,cmp> pq;
  38. pq.push(p);
  39. while(!pq.empty())
  40. {
  41. p=pq.top();
  42. if(l[tx][ty]) break;
  43. int k=l[p.x][p.y];
  44. pq.pop();
  45. rep(i,4)
  46. {
  47. pos p2;
  48. int x2=p.x+move[i][0];
  49. int y2=p.y+move[i][1];
  50. if(x2>=0&&x2<t&&y2>=0&&y2<t)
  51. {
  52. if(!l[x2][y2]&&maze[x2][y2]!='X')
  53. {
  54. l[x2][y2]=k+1;
  55. p2.x=x2;
  56. p2.y=y2;
  57. p2.distance=dis(tx,x2)+dis(ty,y2);
  58. pq.push(p2);
  59. }
  60. }
  61.  
  62. }
  63. /* rep(i,t)
  64. {
  65. rep(j,t)
  66. {
  67. cout<<setw(4)<<l[i][j]<<" ";
  68. }
  69. cout<<"\n";
  70. }
  71. cout<<"\n";
  72. system("pause");*/
  73. }
  74.  
  75. cout<<l[tx][ty]-1<<"\n";
  76. return;
  77. }
  78. int main()
  79. {
  80. ios::sync_with_stdio(0);
  81. cin.tie(0);
  82. int n,m;
  83. cin>>n>>m;
  84. rep(i,n)
  85. rep(j,n) cin>>maze[i][j];
  86. while(m--)
  87. {
  88. memset(l,0,sizeof(l));
  89. int x,y,x2,y2;
  90. cin>>x>>y>>x2>>y2;
  91. astar(x,y,x2,y2,n);
  92. }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment