cow

我就是挂个题在这儿,,,,不想debug。。。。。

**********************************************

改了一下,怎么说呢。。。。我过了我自己所理解的样例,但是没有过题目的样例。。。。。

#include <stdio.h>
int chh[4]={0,0,1,-1};
int chl[4]={1,-1,0,0};
int sum;
struct node
{
    char a[13][11];
}map,mapp;
struct nodee
{
    int a[12][10];
}vis,viss;
void init()
{
    int i,j,k;
    for(i=0;i<12;i++)
        for(j=0;j<10;j++)
        vis.a[i][j]=0;
}
void inits()
{
    int i,j,k;
    for(i=0;i<12;i++)
        for(j=0;j<10;j++)
        viss.a[i][j]=1;
}
void find(int h,int l,char c)
{
    int i,j,k;
   // vis.a[h][l]=1;
   vis.a[h][l]=1;
 //   printf("**h=%d l=%d\n",h,l);
    for(i=0;i<4;i++)
    {
        int hh=h+chh[i],ll=l+chl[i];
        if(hh>=0&&hh<12&&ll>=0&&ll<10)
           if(map.a[hh][ll]==c&&!vis.a[hh][ll]) {find(hh,ll,c);}
    }
}
void change()
{
    int i,j,hh,ll;
   // init(viss,1);
       inits();
       // for(i=0;i<12;i++) {for(j=0;j<10;j++) printf("%d",viss.a[i][j]);printf("\n");}
   // printf("*******\n");

    hh=ll=0;
    for(i=0;i<10;i++)
    {
        int flag=0;
        for(j=0;j<12;j++)
        {
            if(!vis.a[j][i]) {mapp.a[hh][ll]=map.a[j][i];viss.a[hh++][ll]=0;flag=1;}
            if(flag&&j==11) {ll++;hh=0;}
            if(j==11) hh=0;
        }
    }
  //   for(i=11;i>=0;i--) {for(j=0;j<10;j++) printf("%d",viss.a[i][j]);printf("\n");}
    map=mapp;
    vis=viss;
}
void cal()
{
    int i,j,k;
    for(i=0;i<12;i++)
        for(j=0;j<10;j++)
        if(!vis.a[i][j]) sum++;
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF&&n)
    {
        int i,j,k;
        char s[10];
        sum=0;
      //  init(vis,0);
      init();
        for(i=11;i>=0;i--)
           //gets(map.a[i]);
           {
               scanf("%s",map.a[i]);
             //  getchar();
           }
   //     printf("i am the brilliant line \n");for(i=11;i>=0;i--){for(j=0;j<10;j++) printf("%c",map.a[i][j]);printf("\n");}
        for(i=0;i<n;i++)
        {
            scanf("%s %d",s,&j);
            j--;
            k=s[0]-'a';
            char c=map.a[j][k];
     //       printf("h=%d l=%d c=%c\n",j,k,c);
            find(j,k,c);
   // printf("$$$$$$$$$$$$$$$$$$\n"); for(j=11;j>0;j--) {for(k=0;k<10;k++) printf("%d",vis.a[j][k]); printf("\n");}
            change();
        //    for(j=0;j<12;j++) {for(k=0;k<10;k++) printf("%d",vis.a[j][k]);printf("\n");}
        }
        cal();
        printf("%d\n",sum);
    }
}
/*
3
RYBBRBYYRY
RRRBBBBBRR
YRRBRBBBBR
RYYBRYYRYY
BRBBRBRBRY
YYBYRBBRRB
RYBBBBRYYY
YBRBRBRYRB
RYBBBBBBBY
YBBRRRRRBB
RBBRRBRYRR
BBBRRYYYRR
h 10
j 1
g 2
3
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYBYYBBBBB
YYBYYBBBBB
c 2
c 12
g 1
2
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYYYYBBBBB
YYBYYBBBBB
YYBYYBBBBB
g 1
c 12
*/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值