CKAO @ 2022-03-01 14:03:24
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
typedef pair<int,int> PII;
char map[1010][1010];
int d[1010][1010];
int n;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
int bfs(PII strat,PII end)
{
memset(d,-1,sizeof d);
queue<PII> q;
d[strat.first][strat.second]=0;
q.push(strat);
while (q.size())
{
PII t=q.front();
q.pop();
for (int i=0;i<4;i++)
{
int xx=t.first+dx[i],yy=t.second+dy[i];
if (d[xx][yy]!=-1) continue; //之前搜过
if (xx<1||xx>n||yy<1||yy>n) continue; //越界不搜
d[xx][yy]=d[t.first][t.second]+1;
if (xx==end.first&&yy==end.second) return d[xx][yy];
q.push({xx,yy});
}
}
return -1;
}
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
cin>>map[i][j];
PII t1,t2;
cin>>t1.first>>t1.second>>t2.first>>t2.second;
cout<<bfs(t1,t2);
return 0;
}
by 今A @ 2022-03-11 11:15:35
if (d[xx][yy]!=-1) continue; //之前搜过
if (xx<1||xx>n||yy<1||yy>n) continue; //越界不搜
这里的条件应该增加一个是店铺也不能搜!