荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: oopilix (优雅的), 信区: Visual
标 题: [vc]扫雷核代码简化
发信站: 荔园晨风BBS站 (Thu Jul 31 12:50:21 2003), 站内信件
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
struct bomb
{
int nisBomb;
int nisChecked;
int nBombBeside;//如果本身是雷,其值为-1,表示不能点开
};
int SetRandArray(int a[],int nCountofBomb,int nCount )
{
int i=0,nrand; //看看a[]里面有没有,没的话增加,有的话从新rand一次
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/* current Row*/,int j,int m/*max
Row*/,int n) //i是当前行
{
int a,b,s=0;
if(m==i)
return 0;
for(a=((i-1)>0?(i-1):0);a<=((i+1)<m?(i+1):(m-1));a++)
for(b=((j-1)>0?(j-1):0);b<=((j+1)<n?(j+1):(n-1));b++)
Bombs[i*m+j].nBombBeside+=Bombs[a*m+b].nisBomb;
if(1==Bombs[i*m+j].nisBomb)
Bombs[i*m+j].nBombBeside=-1;
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=4,n=4,i,j;
int *a;
a=(int *)malloc(sizeof(int)*m);
SetRandArray(a,m,m*n);
for(i=0;i<m;i++)
printf("%d\n",a[i]);
struct bomb *Bombs;
Bombs=(struct bomb *)malloc(sizeof(struct bomb)*m*n);
memset(Bombs,0,m*n*sizeof(bomb));
SetBomb(Bombs,a,m);
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);
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店