记得开文件就好= - =
#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; }