我就是想问哪里错了,我第一个点没过,但是输出确实没问题
  • 板块P1141 01迷宫
  • 楼主DragonJun
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/7/25 17:21
  • 上次更新2023/11/4 13:21:04
查看原帖
我就是想问哪里错了,我第一个点没过,但是输出确实没问题
401678
DragonJun楼主2021/7/25 17:21
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
typedef pair<int,int>PII;
const int INF=1e8;
const int MAX_N=1005;
char maze[MAX_N][MAX_N];
int d[MAX_N][MAX_N];//d[i][j]说明点(i,j)能走到的最大路径
bool st[MAX_N][MAX_N];
int n,m;

int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
//表示点(x,y)所能走的最大路径
int bfs(int x,int y)
{
    queue<PII>q;
    int sx=x,sy=y;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            d[i][j]=INF;
            st[i][j]=false;//flase表示还没有搜索过
        }
    //表示将起点加入队列
    q.push(PII(sx,sy));
    st[x][y]=true;//表示起点已经被搜索过了
    d[x][y]=1;//起点也要算上,路径起始为1
    while(q.size())
    {
        PII p=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            int x0=p.first,y0=p.second;
            int nx=x0+dx[i],ny=y0+dy[i];
            if(1<=nx&&nx<=n&&1<=ny&&ny<=n&&maze[nx][ny]!=maze[x0][y0]&&d[nx][ny]==INF
            &&!st[nx][ny])
            {
                q.push(PII(nx,ny));
                st[nx][ny]=true;//表示点(nx,ny)已经搜索过了
                d[x][y]++;//路径大小加一
            }
        }
    }
    return d[x][y];
}

int main()
{
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        getchar();
        for(int j=1;j<=n;j++)
            scanf("%c",&maze[i][j]);
    }
    for(int i=0;i<m;i++)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        printf("%d\n",bfs(x,y));
    }
    return 0;
}
2021/7/25 17:21
加载中...