比如P1141里面
#include <bits/stdc++.h>
using namespace std;
struct node{
int x, y, b;
};
int n, m, x, y, sum = 1, bl;
int mp[1010][1010], v[1010][1010];
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int a[1000001]; //记忆化
char c;
queue<node> q;
int main()
{
scanf("%d %d", &n, &m);
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
cin >> c;
mp[i][j] = c-'0';
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
if(!v[i][j]){
sum = 1;
bl++;
while(q.size()) q.pop();
q.push((node){i, j, mp[i][j]});
v[i][j] = bl;
node cur, nxt;
while(q.size()){
cur = q.front();
q.pop();
for(int k=0; k<4; k++){
nxt.x = cur.x+dx[k];
nxt.y = cur.y+dy[k];
nxt.b = mp[nxt.x][nxt.y];
if(nxt.x<=0||nxt.y<=0||nxt.x>n||nxt.y>n) continue;
else if(v[nxt.x][nxt.y] || cur.b==nxt.b) continue;
sum++;
v[nxt.x][nxt.y] = bl;
q.push(nxt);
}
}
a[bl] = sum;
}
}
}
for(int i=1; i<=m; i++){
scanf("%d %d", &x, &y);
printf("%d\n", a[v[x][y]]);
}
return 0;
}
输入字符的时候我一开始用的是getchar()
不对,改成scanf()
还是不行,之后cin
可以。