01迷宫 BFS T了
  • 板块P1141 01迷宫
  • 楼主EasonHu
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/9/24 11:41
  • 上次更新2023/11/2 18:21:42
查看原帖
01迷宫 BFS T了
658368
EasonHu楼主2023/9/24 11:41
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
char s[1005][1005];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
queue<int> quex;
queue<int> quey;
bool vis[1005][1005];
int ds[1005][1005];
int bfs(int x,int y)
{
    memset(vis,false,sizeof(vis));
    int dis=0;
    quex.push(x);
    quey.push(y);
    while(!quex.empty())
    {
        x=quex.front();
        y=quey.front();
        quex.pop();
        quey.pop();
        for(int i=0;i<4;i++)
        {
            int u=x+dx[i],v=y+dy[i];
            if(u<0||u>=n||v<0||v>=n||vis[u][v]==true||s[u][v]==s[x][y])
                continue;
            dis++;
            quex.push(u);
            quey.push(v);
            vis[u][v]=true;
        }   
    }
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(vis[i][j]==true)
                ds[i][j]=dis;
    return dis;
}
int main()
{
    int qx,qy;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            scanf("%c",&s[i][j]);
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&qx,&qy);
        qx--,qy--;
        if(ds[qx][qy]!=0)
            printf("%d\n",ds[qx][qy]);
        else
            printf("%d\n",bfs(qx,qy));
    }
    return 0;
}
2023/9/24 11:41
加载中...