帮帮junruo吧
  • 板块题目总版
  • 楼主linjitong
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/12/29 17:48
  • 上次更新2023/12/29 20:36:24
查看原帖
帮帮junruo吧
779118
linjitong楼主2023/12/29 17:48

P1141

#include <bits/stdc++.h>
using namespace std;
int m[11451][41919];
queue<int> xx;
queue<int> yy;
int ste[1145][1419];
int bo[1145][1419];
int inx,iny;
int in[1145141][9];
int w,b;
int n;
int bfs(int x,int y){
    int flag=1;
    //flag是因为实在想不到别的好的变量名去存可以到的地点的个数,后来发现flag貌似和sum一样
    int nx,ny;
    int move[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
    int sum=1;
    in[flag][1]=x;
    in[flag][2]=y;
    bo[x][y]=1;
    xx.push(x);
    yy.push(y);
    //这里一定要记得标记起点和将起点的坐标放进队列,这里也看了好久才发现。
    while(xx.empty() && yy.empty())
    {
        xx.pop();
        yy.pop();
        for(int t=0;t<4;t++)
        {
            nx=x+move[t][0];
            ny=y+move[t][1];
            w=m[x][y];
            b=m[nx][ny];
            if(bo[nx][ny]==0 && w!=b && nx>0 && ny>0 && nx<=n && ny<=n)
            {
                flag++;
                in[flag][1]=nx;
                in[flag][2]=ny;
                bo[nx][ny]=1;
                xx.push(nx);
                yy.push(ny);
                sum++;
            }
        }
        x=xx.front();
        y=yy.front();
    }
    for(int i=1;i<=flag;i++)
    {
        ste[in[i][1]][in[i][2]]=sum;
    }
    return sum;
}
int main() {
    int m1;
    cin>>n>>m1;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m1; ++j) {
            cin>>m[i][j];
        }
    }
    for (int i = 1; i <= m1; ++i) {
        cin >> inx >> iny;
        if (bo[inx][iny] == 0) {
            bfs(inx, iny);
            printf("%d\n", ste[inx][iny]);
        } else {
            printf("%d\n", ste[inx][iny]);
        }
    }
    return 0;
}

没输出

JUNRUO表示不会

2023/12/29 17:48
加载中...