广搜水题,不用我多说了吧,复习一下广搜
#include<bits/stdc++.h> using namespace std; const int N=1550; const int maxn=1e6+7; int n; int xx,yy,x,y; char ditu[N][N]; int fx[5]={0,0,1,0,-1}; int fy[5]={0,1,0,-1,0}; int a[maxn][4]; bool vis[N][N]; bool can[N][N]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>ditu[i][j]; if(ditu[i][j]=='0') can[i][j]=true; } } cin>>x>>y>>xx>>yy; int t=0,w=1; vis[x][y]=true; a[1][1]=x; a[1][2]=y; a[1][3]=0; while(t<w) { t++; for(int i=1;i<=4;i++) { int dx=a[t][1]+fx[i]; int dy=a[t][2]+fy[i]; if(dx>0&&dy>0&&dx<=n&&dy<=n&&!vis[dx][dy]&&can[dx][dy]) { w++; vis[dx][dy]=true; a[w][1]=dx; a[w][2]=dy; a[w][3]=a[t][3]+1; if(dx==xx&&dy==yy) { printf("%d",a[w][3]); return 0; } } } } return 0; }