643. 动态网格
接收字符
C语言算是白学了。
连续输入两个字符数据时,如果中间有空格,那应该用getchar()消除一下空格。否则会第二次字符数据会接收空格’\n’填充。
char a,b;
scanf("%c",&a);
getchar();
scanf("%c",&b);
printf("%c %c\n",a,b);
这个地方居然搞了这么久。。。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 110;
char a[N][N],backup[N][N];
int T;
int r,c,n,x,y;
char z;
char mod;
int dx[4] = {1,0,-1,0},dy[4] = {0,1,0,-1}; //偏移量
void dfs(int x,int y)
{
a[x][y] = '0';
for(int i=0;i<4;i++)
{
int p=x+dx[i];
int q=y+dy[i];
if(a[p][q]=='1'&&p>=0&&q>=0&&p<r&&q<c)
{
dfs(p,q);
}
}
}
int main()
{
cin>>T;
for(int ci=1;ci<=T;ci++)
{
printf("Case #%d:\n",ci);
memset(a,0,sizeof(a));
memset(backup,0,sizeof(backup));
cin>>r>>c;
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
cin>>a[i][j];
int C;
cin>>C; //C种 操作
while(C--)
{
cin>>mod;
if(mod=='Q')
{
int k=0;//表示1的连通块数
memcpy(backup,a,sizeof(a));
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
if(a[i][j]=='1')
{
// cout<<"YES\n";
dfs(i,j);
k++;
}
}
memcpy(a,backup,sizeof(a));
printf("%d\n",k);
}
else
{
cin>>x>>y>>z;
a[x][y] = z;
}
}
}
}