fork download
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int n,m;
  6. int arr[101][101];
  7. int visit[101][101]={0,};
  8. int dx[4]={1,-1,0,0}, dy[4]={0,0,1,-1};
  9. queue<pair<int,int>>q;
  10.  
  11. int bfs(int i, int j){
  12. q.push({i,j});
  13. visit[i][j]=1;
  14.  
  15. while(!q.empty()){
  16. int x=q.front().first;
  17. int y=q.front().second;
  18. q.pop();
  19.  
  20. if(x==n && y==m)
  21. return visit[x][y];
  22.  
  23. for(int i=0;i<4;i++){
  24. int nx=x+dx[i];
  25. int ny=y+dy[i];
  26.  
  27. if(nx>=1 && nx<=n && ny>=1 && ny<=m && arr[nx][ny]==1 && visit[nx][ny]==0){
  28. visit[nx][ny]=visit[x][y]+1;
  29. q.push({nx,ny});
  30. }
  31. }
  32. }
  33. }
  34.  
  35. int main() {
  36. string str;
  37.  
  38. cin>>n>>m;
  39.  
  40. for(int i=1;i<=n;i++){
  41. cin>>str;
  42.  
  43. for(int j=1;j<=m;j++){
  44. arr[i][j]=str[j-1]-'0';
  45. }
  46. }
  47.  
  48. cout<<bfs(1,1);
  49.  
  50. return 0;
  51. }
Success #stdin #stdout 0.01s 5320KB
stdin
7 7
1011111
1110001
1000001
1000001
1000001
1000001
1111111
stdout
13