YEZAELP

PROG-1037: Slikar

Jun 19th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using pi=pair<int,int>;
  4. using pc=pair<int,char>;
  5. using pii = pair < pc , pi >;
  6. int n,m;
  7. int dx[]={1,-1,0,0};
  8. int dy[]={0,0,1,-1};
  9. bool position(int i,int j){
  10.  
  11.     return i>=1 and i<=n and j>=1 and j<=m ;
  12. }
  13. int main(){
  14.  
  15.     int si,sj;
  16.     scanf("%d%d",&n,&m);
  17.     char ar[n+10][m+10];
  18.     bool visited[n+10][m+10];
  19.     priority_queue <pii,vector<pii>,greater<pii>> q;
  20.     for(int i=1;i<=n;i++){
  21.         for(int j=1;j<=m;j++){
  22.             scanf(" %c",&ar[i][j]);
  23.             visited[i][j]=false;
  24.             if(ar[i][j]=='S'){
  25.                 q.push({ {0,'S'},{i,j} });
  26.             }
  27.             else if(ar[i][j]=='*'){
  28.                 q.push({ {0,'*'},{i,j} });
  29.             }
  30.         }
  31.     }
  32.     while(q.size()>0){
  33.         int d,ui,uj;
  34.         char opr;
  35.         d=q.top().first.first;
  36.         opr=q.top().first.second;
  37.         ui=q.top().second.first;
  38.         uj=q.top().second.second;
  39.         q.pop();
  40.  
  41.         if(ar[ui][uj]=='D'){
  42.             if(opr=='*'){
  43.                 continue;
  44.             }
  45.             else{
  46.                 printf("%d",d);
  47.                 return 0;
  48.             }
  49.         }
  50.  
  51.         if(ar[ui][uj]=='X' || visited[ui][uj])
  52.             continue;
  53.         visited[ui][uj]=true;
  54.  
  55.         for(int i=0;i<4;i++){
  56.             int vi,vj;
  57.             vi=ui+dx[i];
  58.             vj=uj+dy[i];
  59.             if(position(vi,vj) and !visited[vi][vj]){
  60.                 q.push({ {d+1,opr} , {vi,vj}  });
  61.             }
  62.         }
  63.     }
  64.  
  65.     printf("KAKTUS");
  66.  
  67.     return 0;
  68. }
Add Comment
Please, Sign In to add comment