用双向广搜写了这道题,但是WA了一个点
查看原帖
用双向广搜写了这道题,但是WA了一个点
740311
eternal_silence楼主2024/10/24 23:12

今天本来想着练一下双向广搜,就来做这道水题,但是第9个点WA了,很难受,请大佬们赐教

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>

using namespace std;


int n,x1,y1,x2,y2,mov[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
char mp[1005][1005];
bool book1[1005][1005],book2[1005][1005],flag;
struct node{
    int x,y,step;
};

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",mp[i]);
        for(int j=n;j>=1;j--)
        {
            mp[i][j]=mp[i][j-1];
        }
    }
    queue <node> q1,q2;
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    struct node first;
    first.step=0;
    first.x=x1;first.y=y1;
    q1.push(first);
    first.x=x2;first.y=y2;
    q2.push(first);
    book1[x1][y1]=1;book2[x2][y2]=1;
    while(!q1.empty()||!q2.empty())
    {
        struct node head=q1.front();
        q1.pop();
        for(int i=0;i<4;i++)
        {
            int nx=head.x+mov[i][0],ny=head.y+mov[i][1];
            if(nx<1||ny<1||nx>n||ny>n||mp[nx][ny]=='1'||book1[nx][ny])continue;
            book1[nx][ny]=1;
            struct node tail;
            tail.step=head.step+1;
            tail.x=nx;tail.y=ny;
            q1.push(tail);
            if(book2[nx][ny])
            {
                flag=1;
                break;
            }
        }
        if(flag)break;
        head=q2.front();
        q2.pop();
        for(int i=0;i<4;i++)
        {
            int nx=head.x+mov[i][0],ny=head.y+mov[i][1];
            if(nx<1||ny<1||nx>n||ny>n||mp[nx][ny]=='1'||book2[nx][ny])continue;
            book2[nx][ny]=1;
            struct node tail;
            tail.step=head.step+1;
            tail.x=nx;tail.y=ny;
            q2.push(tail);
            if(book1[nx][ny])
            {
                flag=1;
                break;
            }
        }
    }
    printf("%d",q1.back().step+q2.back().step);
    return 0;
}
2024/10/24 23:12
加载中...