Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct Point{
  4.     int i,x,y;
  5.     Point(int ni,int nx,int ny){
  6.         i=ni;x=nx;y=ny;
  7.     }
  8.     Point(){
  9.         i=0;x=0;y=0;
  10.     }
  11.     bool operator <(const Point& a) const
  12.     {
  13.         if(a.i==i){
  14.         if(a.x==x){
  15.             if(a.y==y){
  16.                 return true;
  17.             }else{
  18.                 return a.y<y;
  19.             }
  20.         }else{
  21.             return a.x<x;
  22.         }
  23.     }else{
  24.         return a.i<i;
  25.     }
  26.     }
  27. };
  28. map<Point,vector<Point> > m;
  29. map<Point,bool> used;
  30. int bfs(Point st,Point e){
  31.     queue<pair<Point,int> > q;
  32.     q.push({st,0});
  33.     while(!q.empty()){
  34.         Point v=q.front().first;
  35.         int d=q.front().second;
  36. //      if(v==e){
  37. //          return d;
  38. //      }
  39.         used[v]=true;
  40.         q.pop();
  41.         for(auto to:m[v]){
  42.             if(!used[to]){
  43.                 q.push({to,d+1});
  44.             }
  45.         }
  46.     }
  47.     return -1;
  48. }
  49. //bool operator <=(Point &a,Point &b){
  50. //  if(a.i==b.i){
  51. //      if(a.x==b.x){
  52. //          if(a.y==b.y){
  53. //              return true;
  54. //          }else{
  55. //              return a.y<b.y;
  56. //          }
  57. //      }else{
  58. //          return a.x<b.x;
  59. //      }
  60. //  }else{
  61. //      return a.i<b.i;
  62. //  }
  63. //}
  64. int main(){
  65.     int h,m2,n;
  66.     cin>>h>>m2>>n;
  67.     Point st,en;
  68.     vector<vector<string> > a(h,vector<string> (m2));
  69.     for(int i=0;i<h;i++){
  70.         for(int j=0;j<m2;j++){
  71.             cin>>a[i][j];
  72.             for(int v=0;v<n;v++){
  73.                 if(a[i][j][v]=='1') st=Point(i,j,v);
  74.                 if(a[i][j][v]=='2') en=Point(i,j,v);
  75.                 if(a[i][j][v]!='o'){
  76.                     if(v-1>=0&&a[i][j][v-1]!='0'){
  77.                         m[Point()].push_back(st);
  78.                         m[Point(i,j,v-1)].push_back(Point(i,j,v));
  79.                     }
  80.                     if(j-1>=0&&a[i][j-1][v]!='0'){
  81.                         m[Point(i,j,v)].push_back(Point(i,j-1,v));
  82.                         m[Point(i,j-1,v)].push_back(Point(i,j,v));
  83.                     }
  84.                     if(i-1>=0&&a[i-1][j][v]!='0'){
  85.                         m[Point(i,j,v)].push_back(Point(i-1,j,v));
  86.                         m[Point(i-1,j,v)].push_back(Point(i,j,v));
  87.                     }
  88.                 }
  89.             }
  90.         }
  91.     }
  92.     cout<<bfs(st,en);
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement