Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- struct Point{
- int i,x,y;
- Point(int ni,int nx,int ny){
- i=ni;x=nx;y=ny;
- }
- Point(){
- i=0;x=0;y=0;
- }
- bool operator <(const Point& a) const
- {
- if(a.i==i){
- if(a.x==x){
- if(a.y==y){
- return true;
- }else{
- return a.y<y;
- }
- }else{
- return a.x<x;
- }
- }else{
- return a.i<i;
- }
- }
- };
- map<Point,vector<Point> > m;
- map<Point,bool> used;
- int bfs(Point st,Point e){
- queue<pair<Point,int> > q;
- q.push({st,0});
- while(!q.empty()){
- Point v=q.front().first;
- int d=q.front().second;
- // if(v==e){
- // return d;
- // }
- used[v]=true;
- q.pop();
- for(auto to:m[v]){
- if(!used[to]){
- q.push({to,d+1});
- }
- }
- }
- return -1;
- }
- //bool operator <=(Point &a,Point &b){
- // if(a.i==b.i){
- // if(a.x==b.x){
- // if(a.y==b.y){
- // return true;
- // }else{
- // return a.y<b.y;
- // }
- // }else{
- // return a.x<b.x;
- // }
- // }else{
- // return a.i<b.i;
- // }
- //}
- int main(){
- int h,m2,n;
- cin>>h>>m2>>n;
- Point st,en;
- vector<vector<string> > a(h,vector<string> (m2));
- for(int i=0;i<h;i++){
- for(int j=0;j<m2;j++){
- cin>>a[i][j];
- for(int v=0;v<n;v++){
- if(a[i][j][v]=='1') st=Point(i,j,v);
- if(a[i][j][v]=='2') en=Point(i,j,v);
- if(a[i][j][v]!='o'){
- if(v-1>=0&&a[i][j][v-1]!='0'){
- m[Point()].push_back(st);
- m[Point(i,j,v-1)].push_back(Point(i,j,v));
- }
- if(j-1>=0&&a[i][j-1][v]!='0'){
- m[Point(i,j,v)].push_back(Point(i,j-1,v));
- m[Point(i,j-1,v)].push_back(Point(i,j,v));
- }
- if(i-1>=0&&a[i-1][j][v]!='0'){
- m[Point(i,j,v)].push_back(Point(i-1,j,v));
- m[Point(i-1,j,v)].push_back(Point(i,j,v));
- }
- }
- }
- }
- }
- cout<<bfs(st,en);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement