Advertisement
sahadat49

wasim

Sep 18th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. const int mx=205;
  5. int dx[]={0,0,1,-1};
  6. int dy[]={1,-1,0,0};
  7. int N,M,vis[mx][mx],dis[mx][mx];
  8. int stx,sty,enx,eny,ans;
  9. char grid[mx][mx];
  10. bool is_valid(int x,int y,int con){
  11. if(con==1){
  12. if(x>=1 && y>=1 && x<=N && y<=M && (grid[x][y]=='.' && grid[x][y]!='*') && vis[x][y]==0){
  13. return true;
  14. }
  15. return false;
  16. }
  17. }
  18.  
  19. int BFS(int sx,int sy,int ex,int ey,int con){
  20. clr();
  21. vis[sx][sy]=1;
  22. dis[sx][sy]=0;
  23. queue <PII> Q;
  24. Q.push({sx,sy});
  25. while(!Q.empty()){
  26. int u=Q.front().first;
  27. int v=Q.front().second;
  28. Q.pop();
  29. if(u==ex && v==ey){
  30. return dis[u][v];
  31. }
  32. for(int i=0; i<4; i++){
  33. int xx=u+dx[i];
  34. int yy=v+dy[i];
  35. if(con==1){
  36. if(is_valid(xx,yy,1)){
  37. vis[xx][yy]=1;
  38. dis[xx][yy]=dis[u][v]+1;
  39. Q.push({xx,yy});
  40. }
  41. }else{
  42. if(is_valid(xx,yy,2)){
  43.  
  44. }
  45. }
  46. }
  47.  
  48.  
  49. }
  50. }
  51.  
  52. int main() {
  53. int T;
  54. scanf("%d",&t);
  55. int cnt=0;
  56. while(t--) {
  57. scanf("%d %d",&N,&M);
  58. getchar();
  59. for(int i=1; i<=N; i++){
  60. for(int j=1; j<=M; j++){
  61. scanf("%c",&grid[i][j]);
  62. if(grid[i][j]=='*')
  63. cnt++;
  64. else if(grid[i][j]=='P'){
  65. stx=i,sty=j;
  66. }else if(grid[i][j]=='D'){
  67. enx=i,endy=j;
  68. }
  69. }
  70. getchar();
  71. }
  72. ans=0;
  73. if(cnt<=1){
  74. ans=BFS(stx,sty,enx,eny,1);
  75. }else{
  76. ans=BFS(stx,sty,enx,eny,1);
  77. minn=INT_MAX;
  78. p= BFS(stx,sty,enx,eny,2);
  79. minn=INT_MAX;
  80. q= BFS(enx,eny,stx,sty,2);
  81. }
  82. printf("%d\n",ans);
  83. }
  84. return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement