Ycz2023 @ 2024-11-11 21:55:28
本菜鸟在线求助,爆0
#include<bits/stdc++.h>
using namespace std;
struct nd {
int r,c;
bool w;
};
int n,m,cnt;
int xx[4]= {0,0,1,-1},yy[4]= {1,-1,0,0};
int b[1005][1005],a[100020][2],c[1005][1005];
queue <nd>p;//b存迷宫,a存每组数据,c存走没走过
int main() {
cin >>n>>m;//输入n,m
for(int i=1; i<n; i++) {
for(int j=1; j<n; j++) {
cin >>b[i][j];//输入迷宫
}
}
for(int i=0; i<m; i++) {
cin >>a[i][0]>>a[i][1];//输入每组坐标
}
for(int i=0; i<m; i++) {
for(int q=1; q<=n; q++) {
for(int e=1; e<=n; e++) {
c[q][e]=1;//没走过的都标1
}
}
int cnt=1;
p.push({a[i][0],a[i][1],b[a[i][0]][a[i][1]]});
c[a[i][0]][a[i][1]]=0;
while(!p.empty()) {
nd z=p.front();
p.pop();
for(int j=0; j<4; j++) {
int u=z.r+xx[j],v=z.c+yy[j];
if(u>=1&&u<=n&&v>=1&&v<=n&&z.w!=b[u][v]) {
if(c[u][v]==1) {
c[u][v]=0;
cnt ++;
if(z.w) {
//z.w=1,存0
p.push({u,v,0});
} else {
//z.w=0,存1
p.push({u,v,1});
}
}
}
}
}
cout <<cnt<<endl;
}
帮本人过这题的,长命1000000000000岁
by Cultural_Revolution @ 2024-12-03 17:31:02
while循环里已经搜索过的点不需要再入队,否则死循环