MAGCARI

Slikar

Oct 13th, 2022
825
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. /*
  2.     Task    : ฺBreadth First Search
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 10 October 2022 [21:04]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. struct A{
  10.     int i,j,type;
  11. };
  12. int dir[2][4] = {{1,0,-1,0},{0,1,0,-1}};
  13. char a[55][55];
  14. queue<A > que;
  15. int dis[55][55];
  16. int main(){
  17.     int r,c,sti,stj,eni,enj;
  18.     scanf("%d %d",&r,&c);
  19.     for(int i=1;i<=r;i++){
  20.         scanf(" %s",a[i]+1);
  21.         for(int j=1;j<=c;j++){
  22.             if(a[i][j] == 'S'){
  23.                 sti = i,stj = j;
  24.                 a[i][j] = '.';
  25.             }else if(a[i][j] == 'D'){
  26.                 eni = i,enj = j;
  27.                 a[i][j] = '.';
  28.             }else if(a[i][j] == '*'){
  29.                 que.push({i,j,1});
  30.                 a[i][j] = 'X';
  31.             }
  32.             dis[i][j] = 1e9;
  33.         }
  34.     }
  35.     que.push({sti,stj,0});
  36.     dis[sti][stj] = 0;
  37.     while(!que.empty()){
  38.         A now = que.front();
  39.         que.pop();
  40.         if(now.i == eni && now.j == enj){
  41.             printf("%d\n",dis[now.i][now.j]);
  42.             return 0;
  43.         }
  44.         for(int k=0;k<4;k++){
  45.             int ni = now.i+dir[0][k],nj = now.j+dir[1][k];
  46.             if(ni<1 || nj<1 || ni>r || nj>c)    continue;
  47.             if(a[ni][nj] == 'X')                continue;
  48.             if(now.type == 0){
  49.                 if(dis[ni][nj] != 1e9)          continue;
  50.                 dis[ni][nj] = dis[now.i][now.j]+1;
  51.                 que.push({ni,nj,0});
  52.             }else{
  53.                 if(ni == eni && nj == enj)      continue;
  54.                 a[ni][nj] = 'X';
  55.                 que.push({ni,nj,1});
  56.             }
  57.         }
  58.     }
  59.     printf("KAKTUS\n");
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment