1. #include<bits/stdc++.h>
  2. #include <utility>
  3. //typedef pair<int ,int>ipair;
  4. using namespace std;
  5. int grid[101][101];
  6. int escape_from_grid(int grid[][101],int row,int col,int sx,int sy) {
  7. if(sx==0 || sy==0 || sx==row-1 || sy==col-1)return 0;
  8. int x,y,tx,ty,i;
  9. int mx[4]={-1,1,0,0};
  10. int my[4]={0,0,1,-1};
  11. queue<pair<int,int>>q;
  12. bool vis[101][101];memset(vis,false,sizeof(vis));
  13. int dist[101][101];memset(dist,0,sizeof(dist));
  14. q.push(make_pair(sx,sy));
  15. int mini=101;
  16. dist[sx][sy]=0;
  17. while(!q.empty()){
  18. x=q.front().first;
  19. y=q.front().second;
  20. q.pop();
  21. for(i=0;i<4;i++){
  22. tx=x+mx[i];
  23. ty=y+my[i];
  24. if(tx<0 || ty<0)continue;
  25. if(tx>=row || ty>=col)continue;
  26. else if(!vis[tx][ty] && grid[tx][ty]==0 ){
  27. //cout<<tx<<" "<<ty<<endl;
  28. vis[tx][ty]=true;
  29. dist[tx][ty]=dist[x][y]+1;
  30. q.push(make_pair(tx,ty));
  31. if(tx==0 || ty==0 || tx==row-1 || ty==col-1){if(dist[tx][ty]<mini)mini=dist[tx][ty];}
  32. }
  33. }
  34. }
  35. if(mini==101)return -1;
  36. else return mini;
  37. }
  38. int main() {
  39. ios::sync_with_stdio(0);
  40. cin.tie(0);
  41. int grid_x;
  42. cin >> grid_x;
  43. int grid_y;
  44. cin >> grid_y;
  45. int sx,sy;
  46. for (int i_grid = 0; i_grid < grid_x; i_grid++) {
  47. for (int j_grid = 0; j_grid < grid_y; j_grid++) {
  48. cin >> grid[i_grid][j_grid];
  49. if(grid[i_grid][j_grid]==2){sx=i_grid;sy=j_grid;}
  50. }
  51. }
  52. int out_;
  53. out_ = escape_from_grid(grid,grid_x,grid_y,sx,sy);
  54. cout << out_;
  55. return 0;
  56. }
Language: C++