考点:flood fill算法找连通块
注意点:
1. 输入g[][]是字符数组,判断的时候是‘1’
2. 输出格式
#include <iostream>
#include <cstring>
using namespace std;
const int N = 110;
int T;
int R,C;
char g[N][N]; // 输入g[][]是字符数组,判断的时候是'1'
bool st[N][N];
int op;
int dx[] = {-1,0,1,0}, dy[] = {0,1,0,-1};
void dfs(int x,int y)
{
st[x][y] = 1;
for(int i = 0;i < 4;i ++ )
{
int a = x + dx[i],b = y + dy[i];
if(a >= 0 && a < R && b >= 0 && b < C && g[a][b] == '1' && !st[a][b])
dfs(a,b);
}
}
int query()
{
memset(st,0,sizeof st);
int cnt = 0;
for(int i = 0;i <R;i ++ )
for(int j = 0;j < C;j ++)
if(g[i][j] == '1' && !st[i][j])
{
cnt ++ ;
dfs(i,j);
}
return cnt;
}
int main()
{
cin >> T;
for(int k = 1;k <= T;k ++ )
{
cin >> R >> C;
for(int i = 0;i < R;i ++ ) cin >> g[i];
//for(int i = 0;i < R;i ++ ) cout << g[i] << endl;
cin >> op;
bool is_cout = false; // 输出格式
for(int i = 1;i <= op;i ++ )
{
char c;
cin >> c;
if(c == 'Q')
{
if(!is_cout) printf("Case #%d:\n",k), is_cout = true;
printf("%d\n",query());
}else{
int x,y,z;
cin >> x >> y >> z;
if(z == 1) g[x][y] = '1';
else g[x][y] = '0';
}
}
}
return 0;
}
为啥有个样例输出和标准答案不一样,但是答案过了
如果把char改为int 后面相应的都改为数字型,为什么样例只能输入部分?
没看懂,建议输出看一下
它会把网格中的一行当作一个数输入进去,所以网格只能输入一部分