Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define N 100
- using namespace std;
- ifstream fin("mr.in");
- ofstream fout("mr.out");
- int dl[]={0,0,1,-1};
- int dc[]={1,-1,0,0};
- int n,m,t,b[N+5][N+5];
- struct poz{int i,j;};
- struct per{int it, jt,nr;}a[N+5][N+5];
- queue<poz>q;
- bool inside(int i, int j)
- {
- return i>=1 &&i<=n && j>=1 && j>=m;
- }
- void Lee()
- {
- int in,jn;
- poz r;
- r.i=1,r.j=1;
- b[r.i][r.j]=1;
- q.push(r) ;
- while(!q.empty())
- {
- poz r;
- r=q.front();
- if(a[r.i][r.j].it)
- {
- in=a[r.i][r.j].it;
- jn=a[r.i][r.j].jt;
- if(a[in][jn].nr!=-1 && (b[in][jn]>b[r.i][r.j]+1||b[in][jn]==0))
- {
- b[in][jn]=b[r.i][r.j]+1;
- q.push({in,jn});
- }
- }
- for(int k=0;k<4;k++)
- {
- in=r.i+dl[k];
- jn=r.j+dc[k];
- if(inside(in,jn)&&a[in][jn].nr!=-1&& b[in][jn]==0)
- {
- b[in][jn]=b[r.i][r.j]+1;
- q.push({in,jn});
- }
- }
- q.pop();
- }
- }
- void Citire()
- {
- int x1,y1,x2,y2;
- fin>>n>>m;
- for(int i=1;i<=n;i++)
- for(int j=1;j<=m;j++)fin>>a[i][j].nr;
- fin>>t;
- for(int i=0;i<t;i++)
- {
- fin>>x1>>y1>>x2>>y2;
- a[x1][y1].it=x2;
- a[x1][y1].jt=y2;
- a[x2][y2].it=x1;
- a[x2][y2].jt=y1;
- }
- }
- int main()
- {
- Citire();
- Lee();
- fout<<b[n][m]-1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment