荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店