Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- using namespace std;
- const int dx[]={0,1,-1,0};
- const int dy[]={1,0,0,-1};
- int n,a[101][101],cnt;
- int s1,s2,s3,s4,s5,s6;
- struct DIST
- {
- int x,y,z,w;
- };
- DIST save[1001];
- int main()
- {
- cin>>n;
- for(int i=1;i<=n;++i)
- for(int j=1;j<=n;++j)
- cin>>a[i][j];
- int x,y,q,w,r,t;
- cin>>x>>y>>q>>w>>r>>t;
- queue < pair < int, int > > coada;
- coada.push(make_pair(x,y));
- int b[101][101]={0};
- b[x][y]=1;
- while(coada.empty()==0)
- {
- for(int dir=0;dir<4;++dir)
- {
- int ii=coada.front().first+dx[dir];
- int jj=coada.front().second+dy[dir];
- if(a[ii][jj]==0&&ii<=n&&ii>=1&&jj<=n&&jj>=1&&b[ii][jj]==0)
- {
- b[ii][jj]=b[coada.front().first][coada.front().second]+1;
- coada.push(make_pair(ii,jj));
- }
- }
- coada.pop();
- }
- save[++cnt].x=b[1][1]-1;
- save[cnt].y=b[q][w]-1;
- save[cnt].z=b[r][t]-1;
- save[cnt].w=b[n][n]-1;
- queue < pair < int, int > > coada1;
- coada=coada1;
- coada.push(make_pair(q,w));
- for(int i=1;i<=n;++i)
- for(int j=1;j<=n;++j)
- b[i][j]=0;
- b[q][w]=1;
- while(coada.empty()==0)
- {
- for(int dir=0;dir<4;++dir)
- {
- int ii=coada.front().first+dx[dir];
- int jj=coada.front().second+dy[dir];
- if(a[ii][jj]==0&&ii<=n&&ii>=1&&jj<=n&&jj>=1&&b[ii][jj]==0)
- {
- b[ii][jj]=b[coada.front().first][coada.front().second]+1;
- coada.push(make_pair(ii,jj));
- }
- }
- coada.pop();
- }
- save[++cnt].x=b[1][1]-1;
- save[cnt].y=b[x][y]-1;
- save[cnt].z=b[r][t]-1;
- save[cnt].w=b[n][n]-1;
- queue < pair < int, int > > coada2;
- coada=coada2;
- coada.push(make_pair(r,t));
- for(int i=1;i<=n;++i)
- for(int j=1;j<=n;++j)
- b[i][j]=0;
- b[r][t]=1;
- while(coada.empty()==0)
- {
- for(int dir=0;dir<4;++dir)
- {
- int ii=coada.front().first+dx[dir];
- int jj=coada.front().second+dy[dir];
- if(a[ii][jj]==0&&ii<=n&&ii>=1&&jj<=n&&jj>=1&&b[ii][jj]==0)
- {
- b[ii][jj]=b[coada.front().first][coada.front().second]+1;
- coada.push(make_pair(ii,jj));
- }
- }
- coada.pop();
- }
- save[++cnt].x=b[1][1]-1;
- save[cnt].y=b[q][w]-1;
- save[cnt].z=b[x][y]-1;
- save[cnt].w=b[n][n]-1;
- s1=save[1].x+save[1].y+save[2].z+save[3].w;
- s2=save[1].x+save[1].z+save[3].y+save[2].w;
- s3=save[2].x+save[2].y+save[1].z+save[3].w;
- s4=save[2].x+save[2].z+save[3].z+save[1].w;
- s5=save[3].x+save[3].z+save[1].y+save[2].w;
- s6=save[3].x+save[3].y+save[2].y+save[1].w;
- cout<<min(s1,min(s2,min(s3,min(s4,min(s5,s6)))));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement