首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

VC++实现扫雷展开算法

发布网友

我来回答

3个回答

热心网友

void appear(char **s,char **p,int i,int j,int l)
{
if(0<=i&&i<=(l-1)&&0<=j&&j<=(l-1)&&s[i][j]!='0')
{
s[i][j]=p[i][j];
if(p[i][j]=='0')
{
appear(s,p,i-1,j-1,l);
appear(s,p,i-1,j,l);
appear(s,p,i-1,j+1,l);
appear(s,p,i,j+1,l);
appear(s,p,i+1,j+1,l);
appear(s,p,i+1,j,l);
appear(s,p,i+1,j-1,l);
appear(s,p,i,j-1,l);
}
}
}

这是我写的关于展开空白的程序段。
也是用递归做的,思路是这样的:碰到数字就结束,碰到打开此空白格的母格,也停止。这样就能实现展开空白。剩下的就是一些细枝末节的处理

热心网友

我写过这个算法;

假设打开一个方格的函数是openOne();
打开一个方格的时候判断这个方格周围有几颗地雷, 如果是0的话, 接着依次调用openOne()打开周围没有打开的地雷.

是递归.

热心网友

想搞清楚的话 显然 要追加分啊……

void fb(int a[][NN])
{int m,n;
for(m=0;m<MM;m++)
{
for(n=0;n<NN;n++)
{if(m+n==0||(m==M+1&&n==N+1)||(m==0&&n==N+1)||(m==M+1&&n==0))printf(" ");
else if(n==0||m==0||n==N+1||m==M+1)
{
if(a[m][n]<10)printf("%-2d",a[m][n]);
else printf("%c ",a[m][n]+87);
}
else if(a[m][n]!=9&&a[m][n]!=K&&a[m][n]!=&&a[m][n]!=63)
{if(a[m][n]==0)printf(" ");
else printf("%-2d",a[m][n]);
}
else if(a[m][n]==9)printf("%c ",2);
else if(a[m][n]==127) printf("%c ",K);
else if(a[m][n]==)printf("雷");
else printf("?");

}
fa(1);

}
fa(1);
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com