荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: oopilix (优雅的), 信区: Visual
标  题: VC扫雷步骤1的C代码.
发信站: 荔园晨风BBS站 (Wed Jul 30 11:50:57 2003), 站内信件

递归求解出地雷盘的各个点的周围地雷数。还是有点bug.求矩阵最后一行
的第一个和最后一个的周围地雷数,是空值或不可预料值。大家调试一下。
讨论讨论。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
struct bomb
{
        int nisBomb;
        int nisChecked;
        int nBombBeside;

};
int SetRandArray(int a[],int nCountofBomb,int nCount )
{
        int i=0,nrand;   //看看a[]里面有没有,没的话增加,有的话从新rand一次
        //srand(time(NULL));
        srand(time(NULL));
        nrand=rand()%nCount;
        if(nCountofBomb>=1)
        {
                SetRandArray(a,nCountofBomb-1,nCount);
                for(i=0;i<nCountofBomb-1;i++)
                {
                    while(nrand==a[i])
                         nrand=rand()%nCount;
                }
                a[nCountofBomb-1]=nrand;
                return 0;
        }
   return 0;
}
int SetBomb(struct bomb *Bombs,int a[],int len)
{
        int i=0,t;
        for(i=0;i<len;i++)
        {
         t=a[i];
                 (Bombs+t)->nisBomb=1;
        }
        return 0;
}
int SetBombBoard(struct bomb *Bombs ,int i,int j,int m,int n) //i是当前行
{
        int a,b,s;

        if(m==i) return 0;
        if(m-1!=i&&n-1!=j&&0!=i&&0!=j)
        {
                for(a=i-1;a<=i+1;a++)
                for(b=j-1;b<=j+1;b++)
                {
                          s=(Bombs+a*m+b)->nisBomb;
                          (Bombs+i*m+j)->nBombBeside+=s;
                }
        }
    if(0==i&&0==j)
        {
         for(a=i;a<=i+1;a++)
                 for(b=j;b<=j+1;b++)
                         (Bombs+i*m+j)->nBombBeside+=(Bombs+a*m+b)->nisBomb;

        }
   if(0==i&&n-1!=j)
        {
         for(a=i;a<=i+1;a++)
                for(b=j-1;b<=j+1;b++)
             (Bombs+i*m+j)->nBombBeside+=(Bombs+a*m+b)->nisBomb;
        }
         if(0==i&&n-1==j)
        {
                for(a=i;a<=i+1;a++)
                        for(b=j-1;b<=j;b++)
                                 (Bombs+i*m+j)->nBombBeside+=(Bombs+a*m+b)->
nisBomb;
        }
         if(0!=i&&0==j)
        {
                for(a=i-1;a<=i+1;a++)
                        for(b=j;b<=j+1;b++)
                                 (Bombs+i*m+j)->nBombBeside+=(Bombs+a*m+b)->
nisBomb;
        }
         if(0!=i&&n-1==j)
        {
                for(a=i-1;a<=i+1;a++)
                        for(b=j-1;b<=j;b++)
                                 (Bombs+i*m+j)->nBombBeside+=(Bombs+a*m+b)->
nisBomb;
        }
         if(i==m-1&&0==j)
        {
        (Bombs+i*m+j)->nBombBeside=0;
                for(a=i-1;a<=i;a++)
                        for(b=j;b<=j+1;b++)
                        {
                                 printf("(%d)",(Bombs+i*m+j)->nBombBeside);
                                 (Bombs+i*m+j)->nBombBeside+=(Bombs+a*m+b)->
nisBomb;

                        //       printf("(%d*%d+%d)",i,m,j);
                        }
                // (Bombs+7*m+0)->nBombBeside=9;
        }
         if(m-1==i&&n-1!=j)
        {
                for(a=i-1;a<=i;a++)
                        for(b=j-1;b<=j+1;b++)
                                 (Bombs+i*m+j)->nBombBeside+=(Bombs+a*m+b)->
nisBomb;
        }
         if(m-1==i&&n-1==j)
        {
                for(a=i-1;a<=i;a++)
                        for(b=j-1;b<=j;b++)
                                 (Bombs+i*m+j)->nBombBeside+=(Bombs+a*m+b)->
nisBomb;
        }

        if(1==(Bombs+i*m+j)->nisBomb)
                (Bombs+i*m+j)->nBombBeside--;
        if(n-1==j)
        SetBombBoard(Bombs,i+1,0,m,n);
        else
                SetBombBoard(Bombs,i,j+1,m,n);

 return 0;
}
int main()
{
        int m=8,n=8,i,j;
        int a[8];
        SetRandArray(a,8,64);
    for(i=0;i<8;i++)
                printf("%d\n",a[i]);
        struct bomb *Bombs;

        Bombs=(struct bomb *)malloc(sizeof(struct bomb)*m*n);
        for(i=0;i<m;i++)
                for(j=0;j<n;j++)
        {
                /*Bombs[m*i+j].nisBomb=0;
                Bombs[m*i+j].nBombBeside=0;
                Bombs[m*i+j].nisChecked=0; */
                        (Bombs+m*i+j)->nisBomb=0;
                                (Bombs+m*i+j)->nBombBeside=0;
                                (Bombs+m*i+j)->nisChecked=0;
        }
   SetBomb(Bombs,a,8);
   for(i=0;i<m;i++)
   {
           for(j=0;j<n;j++)
           {
                   printf("%2d",Bombs[m*i+j].nisBomb);
           }
           printf("\n");
   }
    printf("==========================\n");
        SetBombBoard(Bombs,0,0,m,n);
        for(i=0;i<m;i++)
        {
                for(j=0;j<n;j++)
                {
                        printf("%2d",(Bombs+m*i+j)->nBombBeside);

                }
                printf("\n");
        }
        printf("%2d",(Bombs+m*7+0)->nBombBeside);
        //printf("_*%d*_",(Bombs-45)->nisBomb);
        getchar();
    free(Bombs);


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店