zoukankan      html  css  js  c++  java
  • blocks

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 int n,m,flag=1,cnt;
     5 int a,b,x,y,c;
     6 int movee[4][2]={-1,0,1,0,0,-1,0,1};
     7 int p[505][505];
     8 int f[250050];//存点
     9 int find(int x){
    10     if(f[x]==x)
    11         return x;
    12     else{
    13         f[x]=find(f[x]);
    14         return f[x];
    15     }
    16 }
    17 int main(){
    18     scanf("%d%d",&n,&m);
    19     memset(p,-1,sizeof(p));
    20     for(int i=1;i<=n*n;i++)
    21         f[i]=i;
    22     for(int i=1;i<=m;i++){
    23         scanf("%d%d%d",&c,&x,&y);
    24         p[x][y]=c;
    25         flag=1;
    26         for(int j=0;j<4;j++)
    27         {
    28             int x1=x+movee[j][0],y1=y+movee[j][1];//左右上下找
    29             if(x1>0&&y1>0&&x1<=n&&y1<=n&&p[x][y]==p[x1][y1])
    30             {//合法且颜色相同
    31                 a=find((x1-1)*n+y1);//旁边点找出的爹
    32                 b=find((x-1)*n+y);//本来的爹(都是把二维转化成一维)
    33                 if(a!=b&&flag)
    34                 {
    35                     f[b]=a;
    36                     flag=0;//已经连上
    37                 }
    38                 else if(a!=b&&!flag)
    39                 {
    40                     cnt--;
    41                     f[a]=f[b];
    42                 }
    43             }
    44             if(j==3&&flag)
    45             {
    46                 cnt++;
    47             }//这层一定要放在外面
    48         }
    49         printf("%d
    ",cnt);
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    哈希及哈希算法
    十四章课后练习题
    第十章课后题----3
    20151015----知识整理
    第十章练习题----2
    加热水杯
    函数
    异常反馈
    20151013知识体系整理,需与20151011相整合
    Java随机输出验证码包含数字、字母、汉字
  • 原文地址:https://www.cnblogs.com/al76/p/8298482.html
Copyright © 2011-2022 走看看