求助!80分

P1746 离开中山路

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; //越界不搜

这里的条件应该增加一个是店铺也不能搜!


|