0
点赞
收藏
分享

微信扫一扫

643. 动态网格 和奶牛选美一个题型-染色法Flood Fill

Villagers 2022-01-06 阅读 19

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;
            }
           
        }
    }
}
举报

相关推荐

0 条评论