回 帖 发 新 帖 刷新版面

主题:各位大挟 帮帮忙把 急!关于扫雷的问题啊 (高分请教)

我现在用cb做扫雷 
现在做到 递归 老是有错误 不知道 错误在哪里啊 帮我看看可以吗

其中 等于零的是表示空格,等于-1是雷 
m 为行    s列

void __fastcall TFrm_S::dj(int u,int p)
{
if (a[u][p]!=-1&&a[u][p]!=0)
     {
         if (a[u][p]==1)
        {
            j1((p+1)*16,(u+4)*16);
        }
         if (a[u][p]==2)
        {
            j2((p+1)*16,(u+4)*16);
        }
         if (a[u][p]==3)
        {
           j3((p+1)*16,(u+4)*16);
        }
         if (a[u][p]==4)
        {
           j4((p+1)*16,(u+4)*16);
        }
         if (a[u][p]==5)
        {
            j5((p+1)*16,(u+4)*16);
        }
            }
  else
   {
    if(a[u][p]==0)
      {
      if((a[u-1][p-1]!=-1)&&(u-1>=0)&&(p-1>=0))
          dj(u-1,p-1);
      if((a[u-1][p]!=-1)&&(u-1>=0))
          dj(u-1,p);
      if((a[u-1][p+1]!=-1)&&(u-1>=0)&&(p+1<=s-1))
          dj(u-1,p+1);                    //  s
      if((a[u][p-1]!=-1)&&(p-1>=0))
          dj(u,p-1);
      if((a[u][p+1]!=-1)&&(p+1<=s-1))
          dj(u,p+1);           // s
      if((a[u+1][p-1]!=-1)&&(u+1<=m-1)&&(p-1>=0))
          dj(u+1,p-1);           // m
      if((a[u+1][p]!=-1)&&(u+1<=m-1))
          dj(u+1,p);            // m
       if((a[u+1][p+1]!=-1)&&(u+1<=m-1)&&(p+1<=s-1))
          dj(u+1,p+1);            // m           s
      }
      }
}


好像是else 语句后面有问题 可是我看着里面没错误啊
请大家帮帮忙把

回复列表 (共2个回复)

沙发

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int blei(int arr[][9])
{     int k,i,j,p;
      srand(time(NULL));
      for(k=0;;k++)
      {    i=rand()%9;
           j=rand()%9;
           arr[i][j]=10;
           p=0;
            for(i=0;i<9;i++)
               for(j=0;j<9;j++)
               {    if(arr[i][j]==10)
                        p++;
               }
           if(p==10)
              break;
      }
}
void main()
{     void prints(int arr[][11]);
      int i,j;
      int a1[9][9]={0},a[11][11]={0};
      blei(a1);
      for(i=0;i<9;i++)
          for(j=0;j<9;j++)
             a[i+1][j+1]=a1[i][j];
      for(i=1;i<10;i++)
          for(j=1;j<10;j++)
             if(a[i][j]==10)
             {   if(a[i-1][j]!=10)
                    a[i-1][j]++;
                 if(a[i+1][j]!=10)
                    a[i+1][j]++;
                 if(a[i][j-1]!=10)
                    a[i][j-1]++;
                 if(a[i][j+1]!=10)
                    a[i][j+1]++;
                 if(a[i-1][j-1]!=10)
                    a[i-1][j-1]++;
                 if(a[i-1][j+1]!=10)
                    a[i-1][j+1]++;
                 if(a[i+1][j-1]!=10)
                    a[i+1][j-1]++;
                 if(a[i+1][j+1]!=10)
                    a[i+1][j+1]++;
             }
      prints(a);
      system("PAUSE");
}
void prints(int arr[][11])
{     int i,j;
      for(i=1;i<10;i++)
      {   for(j=1;j<10;j++)
          {   if(arr[i][j]==10)
                 printf("  *");
              else if(arr[i][j]==0)
                 printf("  #");
              else
                 printf("%3d",arr[i][j]);
          }
          printf("\n");
      }
}

板凳

对不起啊 您用的c语言把 而且是用数组啊 好像是只能一次一次的点吗
没有用到递归啊 就像系统自带的扫雷 那样我点中 一个空白区 回出来一大片
区域 啊 怎么做啊请问 用c++ 就是我用的那中 您能给指点迷经吗

我来回复

您尚未登录,请登录后再回复。点此登录或注册