记得开文件就好= - =
#include <bits/stdc++.h>
using namespace std;
const int N=1e2+5,M=1e5+5;
int c[N][M];
int a[N];
int w[N][M];
int dis[N][M];
int vis[N][M];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
struct vv{
int x,y;
};
queue<vv>q;
void bfs()
{
while(q.size())
{
vv temp=q.front();
//printf("%d %d %d\n",temp.x,temp.y,dis[temp.x][temp.y]);
q.pop();
for(int i=0;i<4;i++)
{
int tx=temp.x+dx[i],ty=temp.y+dy[i];
//if(tx==4&&ty==2) printf("%d %d %d\n",temp.x,temp.y,dis[temp.x][temp.x]);
//cout<<tx<<' '<<ty<<endl;||vis[tx][ty]
if(i==2&&temp.y>a[temp.x+1]+1)//下
{
if(vis[temp.x+1][a[temp.x+1]+1]||w[temp.x+1][a[temp.x+1]+1]) continue;
dis[temp.x+1][a[temp.x+1]+1]=dis[temp.x][temp.y]+1;
q.push({temp.x+1,a[temp.x+1]+1});
vis[temp.x+1][a[temp.x+1]+1]=1;
}
else if(i==3&&temp.y>a[temp.x-1]+1)//上
{
if(vis[temp.x-1][a[temp.x-1]+1]||w[temp.x-1][a[temp.x-1]+1]) continue;
dis[temp.x-1][a[temp.x-1]+1]=dis[temp.x][temp.y]+1;
q.push({temp.x-1,a[temp.x-1]+1});
vis[temp.x-1][a[temp.x-1]+1]=1;
}
else
{
if(vis[tx][ty]||w[tx][ty]) continue;
dis[tx][ty]=dis[temp.x][temp.y]+1;
q.push({tx,ty});
vis[tx][ty]=1;
}
}
}
}
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int n;scanf("%d",&n);
for(int i=0;i<N-4;i++)
{
for(int j=0;j<M-4;j++)
{
w[i][j]=1;
}
}
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
for(int j=1;j<=a[i]+1;j++)
{
w[i][j]=0;
}
}
int r1,c1,r2,c2;
scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
q.push({r1,c1});
memset(dis,-1,sizeof dis);
dis[r1][c1]=0;
vis[r1][c1]=1;
bfs();
printf("%d\n",dis[r2][c2]);
return 0;
}
京公网安备 11010502036488号