#define M 9 //定义有9行
#define N 9 //定义有9列
#define MN 10 //总共10个地雷
#include
#include
#include
//检查是否有相同位置的地雷
int samemine(int *m,int n){
int i;
for(i=0;i if (m[n]==m[i]) return 1; //相同则返回1
return 0;
}
//布雷函数,随机产生NM/10个地雷
void mine(int (*m)[N],int mm,int nn,int mn){
int row,col,i;
int Mine[mn]; //用于记录雷的位置
srand((unsigned int)time(NULL));//初始化种子为随机值
for(i=0;i while(1){
Mine[i]=rand() % (mm*nn);
if(samemine(Mine,i)==0) break; //检查随机数中是否有相同,即检查有相同雷的位置
}
m[Mine[i]/nn][Mine[i]%nn]=9; //矩阵中雷的位置设为9
}
}
//地雷分布函数,
void mine_dis(int (*m)[N],int mm,int nn){
int i,j,k,x,y;
//地雷的8个方向
int fx[8][2]={{1,0},{1,1},{1,-1},{0,1},{0,-1},{-1,0},{-1,-1},{-1,1}};
for(i=0;i for(k=0;k<8;k++){
x=i+fx[k][0]; y=j+fx[k][1]; //计算第K个方向的坐标
if (m[x][y]!=9 && x>=0 && x=0 && y m[x][y]++;
}
}
}
//矩阵输出函数
void printphalanx(int (*m)[N],int mm,int nn){
int i,j;
for(i=0;i for(j=0;j printf("%2d",m[i][j]);
printf("\n");
}
}
int main(){
int m[M][N],i,j;
for(i=0;i mine(m,M,N,MN); //在M行N列矩阵中产生MN个地雷
mine_dis(m,M,N); //计算雷区分布
printphalanx(m,M,N); //显示矩阵
}
