Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///Antonelli Alen
- #include <iostream>
- #include <vector>
- #include <queue>
- #define INF (1<<29)
- using namespace std;
- int dx[] = {0, 0, 1,-1};
- int dy[] = {1,-1, 0, 0};
- struct grafo {
- vector<string> ady;
- vector< vector<int> > dist;
- vector< pair<int,int> > ini;
- queue< pair<int,int> > cola;
- int n, m, p;
- void leer()
- {
- cin>>n>>m;
- ady.resize(n);
- dist = vector< vector<int> > (n+1, vector<int> (m, INF) );
- for(int i=0; i<n; i++)
- cin>>ady[i];
- }
- bool visitable (int x, int y)
- {
- if ((0<=x && x<n) && (0<=y && y<m) )
- if( ady[x][y]!='#' )
- return true;
- return false;
- }
- void BFS ()
- {
- for(int i=0; i<n; i++) /// laterales
- {
- if ( visitable(i, 0) )
- ini.push_back( {i,0} );
- if ( visitable(i, m-1) )
- ini.push_back( {i,m-1} );
- }
- for(int i=0; i<m; i++) /// superior inferior
- {
- if ( visitable(0, i) )
- ini.push_back( {0,i} );
- if ( visitable(n-1,i) )
- ini.push_back( {n-1,i} );
- }
- for(int i=0; i<ini.size(); i++)
- {
- int x = ini[i].first;
- int y = ini[i].second;
- dist[x][y] = 0;
- cola.push( ini[i] );
- }
- while(cola.size())
- {
- int x = cola.front().first;
- int y = cola.front().second;
- cola.pop();
- for(int i=0; i<4; i++)
- {
- int vx = x+dx[i];
- int vy = y+dy[i];
- if ( visitable(vx,vy) )
- if ( dist[x][y]+1 < dist[vx][vy] )
- {
- dist[vx][vy] = dist[x][y]+1;
- cola.push( {vx,vy} );
- }
- }
- }
- for(int i=0; i<n; i++)
- {
- for(int j=0; j<m; j++)
- {
- if (ady[i][j]=='#')
- cout<<"# ";
- else if (dist[i][j]==INF)
- cout<<"N ";
- else if (dist[i][j]>9)
- cout<<dist[i][j]<<" ";
- else
- cout<<dist[i][j]<<" ";
- }
- cout<<endl;
- }
- cin>>p;
- int x, y;
- for(int i=0; i<p; i++)
- {
- cin>>x>>y;
- cout<<x<<" "<<y<<" -> ";
- if(dist[x-1][y-1]==INF)
- cout<<"NO"<<endl;
- else cout<<dist[x-1][y-1]<<endl;
- }
- }
- };
- int main()
- {
- grafo g;
- g.leer();
- g.BFS();
- return 0;
- }
- /*
- 6 10
- ##########
- ____###__#
- ____#_##_#
- ##__####_#
- #________#
- ##########
- 4
- 1 1
- 5 2
- 4 9
- 3 6
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement